poolmanager

package module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2024 License: BSD-3-Clause Imports: 12 Imported by: 0

README

PoolManager

poolmanager adalah sebuah package di Go yang digunakan untuk mengelola pooling objek secara efisien. Package ini memungkinkan Anda untuk mengatur konfigurasi pooling, sharding, caching, auto-tuning, dan kebijakan eviksi untuk objek-objek yang sering digunakan dalam aplikasi Anda.

Fitur

  • Pooling: Mengelola objek secara efisien untuk menghindari overhead pembuatan objek berulang.
  • Sharding: Mendukung pembagian pool menjadi beberapa shard untuk meningkatkan performa pada lingkungan bersamaan.
  • Caching: Menyediakan caching untuk mengurangi akses berulang ke objek yang sering digunakan.
  • Auto-Tuning: Menyesuaikan ukuran pool secara otomatis berdasarkan kebutuhan aplikasi.
  • Eviction Policies: Mendukung berbagai kebijakan eviksi seperti TTL, LRU, dan LFU untuk mengelola objek yang tidak terpakai.
  • Monitoring: Mencatat metrik penggunaan objek dalam pool dan menyediakan callback untuk berbagai kejadian.

Instalasi

Untuk menggunakan package ini, silakan unduh melalui Go modules:

go get github.com/hibbannn/pool-manager

Pool Configuration Guide

Anda dapat mengatur konfigurasi pool menggunakan PoolConfigBuilder. Berikut adalah opsi konfigurasi yang tersedia:

Opsi Konfigurasi
WithSizeLimit(sizeLimit int)
  • Menetapkan batas maksimum ukuran pool.
  • Parameter:
    • sizeLimit: Batas maksimum jumlah objek yang dapat disimpan di dalam pool.
WithInitialSize(initialSize int)
  • Menetapkan ukuran awal pool saat diinisialisasi.
  • Parameter:
    • initialSize: Ukuran awal objek di dalam pool.
WithAutoTune(autoTune bool)
  • Mengaktifkan atau menonaktifkan fitur auto-tuning.
  • Parameter:
    • autoTune: true untuk mengaktifkan auto-tuning, false untuk menonaktifkan.
WithAutoTuneFactor(factor float64)
  • Menetapkan faktor peningkatan ukuran pool saat auto-tuning diaktifkan.
  • Parameter:
    • factor: Faktor peningkatan ukuran.
WithEnableCaching(enable bool)
  • Mengaktifkan atau menonaktifkan caching.
  • Parameter:
    • enable: true untuk mengaktifkan caching, false untuk menonaktifkan.
WithCacheMaxSize(maxSize int)
  • Menetapkan batas maksimum jumlah objek yang dapat disimpan dalam cache.
  • Parameter:
    • maxSize: Batas maksimum ukuran cache.
WithSharding(enabled bool, shardCount int)
  • Mengaktifkan fitur sharding dan menetapkan jumlah shard.
  • Parameter:
    • enabled: true untuk mengaktifkan sharding, false untuk menonaktifkan.
    • shardCount: Jumlah shard yang digunakan.
WithTTL(ttl time.Duration)
  • Menetapkan Time-to-Live (TTL) untuk kebijakan eviksi objek dalam pool.
  • Parameter:
    • ttl: Durasi TTL.
WithOnGet(callback func(poolType string))
  • Menetapkan callback yang dipanggil saat objek diambil dari pool.
  • Parameter:
    • callback: Fungsi yang dipanggil, dengan parameter poolType yang menunjukkan tipe pool.
WithOnPut(callback func(poolType string))
  • Menetapkan callback yang dipanggil saat objek dikembalikan ke pool.
  • Parameter:
    • callback: Fungsi yang dipanggil, dengan parameter poolType yang menunjukkan tipe pool.
WithOnEvict(callback func(poolType string))
  • Menetapkan callback yang dipanggil saat objek dihapus dari pool.
  • Parameter:
    • callback: Fungsi yang dipanggil, dengan parameter poolType yang menunjukkan tipe pool.
WithOnAutoTune(callback func(poolType string, newSize int))
  • Menetapkan callback yang dipanggil saat auto-tuning terjadi.
  • Parameter:
    • callback: Fungsi yang dipanggil, dengan parameter poolType dan newSize yang menunjukkan ukuran baru setelah auto-tuning.
WithOnError(callback func(poolType string, err error))
  • Menetapkan callback yang dipanggil saat terjadi error.
  • Parameter:
    • callback: Fungsi yang dipanggil, dengan parameter poolType dan err yang menunjukkan jenis kesalahan.

Contoh Builder

Berikut adalah contoh penggunaan konfigurasi pool:

poolConfig := NewPoolConfigBuilder().
    WithSizeLimit(100).
    WithInitialSize(10).
    WithAutoTune(true).
    WithAutoTuneFactor(1.5).
    WithEnableCaching(true).
    WithCacheMaxSize(50).
    WithSharding(true, 4).
    WithTTL(5 * time.Minute).
    WithOnGet(func(poolType string) {
        fmt.Println("Object taken from pool:", poolType)
    }).
    WithOnPut(func(poolType string) {
        fmt.Println("Object returned to pool:", poolType)
    }).
    WithOnEvict(func(poolType string) {
        fmt.Println("Object evicted from pool:", poolType)
    }).
    WithOnAutoTune(func(poolType string, newSize int) {
        fmt.Printf("Auto-tuning for %s, new size: %d\n", poolType, newSize)
    }).
    WithOnError(func(poolType string, err error) {
        fmt.Printf("Error in %s: %v\n", poolType, err)
    }).
    Build()

Mengimplementasikan PoolAble

Untuk menggunakan objek dalam pool, struct harus mengimplementasikan interface PoolAble dengan mendefinisikan metode Reset. Metode ini digunakan untuk mereset status objek sebelum dikembalikan ke pool. Contoh:

type LargeObject struct {
    Data   [102400]byte // Simulasi objek besar (100 KB)
    ID     int
    Name   string
}

// Reset mengimplementasikan metode Reset pada interface PoolAble
func (l *LargeObject) Reset() {
    l.ID = 0
    l.Name = ""
}
Sharding

Sharding dapat diaktifkan untuk membagi pool menjadi beberapa bagian (shard) yang berbeda. Ini berguna dalam aplikasi bersamaan dengan tingkat konkurensi tinggi, di mana akses ke objek dari pool sering terjadi. Sharding membantu mengurangi kontensi dengan mendistribusikan permintaan ke beberapa shard.

  • WithSharding: Mengaktifkan fitur sharding dan menentukan jumlah shard.

Contoh:

WithSharding(true, 4) // Mengaktifkan sharding dengan 4 shard
Kebijakan Eviksi

poolmanager mendukung beberapa kebijakan eviksi untuk mengelola objek dalam pool, termasuk:

  • TTL (Time-To-Live): Menghapus objek yang sudah tidak digunakan selama periode waktu tertentu.
  • LRU (Least Recently Used): Menghapus objek yang paling jarang digunakan baru-baru ini.
  • LFU (Least Frequently Used): Menghapus objek yang paling jarang digunakan secara keseluruhan.

Anda dapat menetapkan kebijakan eviksi melalui konfigurasi pool.

Contoh:

poolConfig := NewPoolConfigBuilder().
    WithTTL(5 * time.Minute).
    Build()

Contoh

package main

import (
    "fmt"
    "sync"
    "time"
    "github.com/hibbannn/pool-manager"
)

// LargeObject adalah contoh struct yang mengimplementasikan interface PoolAble
type LargeObject struct {
    Data   [102400]byte // Simulasi objek besar (100 KB)
    ID     int
    Name   string
}

// Reset mengimplementasikan metode Reset pada interface PoolAble
func (l *LargeObject) Reset() {
    l.ID = 0
    l.Name = ""
}

func main() {
    // Buat instance PoolManager
    poolManager := poolmanager.NewPoolManager()

    // Konfigurasi Pool dengan berbagai opsi
    poolConfig := poolmanager.NewPoolConfigBuilder().
        WithSizeLimit(2000).
        WithInitialSize(100).
        WithAutoTune(true).
        WithAutoTuneFactor(1.5).
        WithEnableCaching(true).
        WithCacheMaxSize(500).
        WithSharding(true, 10).
        WithTTL(10 * time.Minute).
        Build()

    // Tambahkan pool dengan tipe "largeObject"
    err := poolManager.AddPool("largeObject", func() poolmanager.PoolAble {
        return &LargeObject{}
    }, poolConfig)

    if err != nil {
        fmt.Println("Gagal menambahkan pool:", err)
        return
    }

    // Contoh penggunaan pool dengan beberapa goroutine
    const numWorkers = 10
    const iterations = 1000
    var wg sync.WaitGroup
    wg.Add(numWorkers)

    for i := 0; i < numWorkers; i++ {
        go func(workerID int) {
            defer wg.Done()
            for j := 0; j < iterations; j++ {
                instance, err := poolManager.AcquireInstance("largeObject")
                if err != nil {
                    fmt.Println("Gagal mengambil instance:", err)
                    continue
                }

                largeObj, ok := instance.(*LargeObject)
                if ok {
                    largeObj.ID = workerID*iterations + j
                    largeObj.Name = fmt.Sprintf("Worker-%d-Item-%d", workerID, j)
                }

                // Kembalikan objek ke pool setelah selesai digunakan
                err = poolManager.ReleaseInstance("largeObject", largeObj)
                if err != nil {
                    fmt.Println("Gagal mengembalikan instance:", err)
                }
            }
        }(i)
    }

    wg.Wait()
    fmt.Println("Selesai menjalankan contoh.")
}
FAQ / Troubleshooting
Q: Mengapa saya mendapatkan error "pool does not exist" saat memanggil AcquireInstance?

A: Pastikan Anda sudah menambahkan pool dengan AddPool sebelum mencoba mengambil instance dari pool.

Q: Apa yang terjadi jika ReleaseInstance gagal?

A: Jika terjadi error saat mengembalikan objek ke pool, periksa callback OnError untuk menangani error ini dengan lebih baik.

Documentation

Overview

Package poolmanager adalah sebuah package di Go yang digunakan untuk mengelola pooling objek secara efisien. Package ini memungkinkan Anda untuk mengatur konfigurasi pooling, sharding, caching, auto-tuning, dan kebijakan eviksi untuk objek-objek yang sering digunakan dalam aplikasi Anda.

Index

Constants

View Source
const (
	ErrPoolDoesNotExist          = "pool does not exist: "           // Error untuk pool yang tidak ditemukan
	ErrInvalidShardedPoolName    = "pool is not sharded as expected" // Error untuk tipe pool yang tidak sesuai dengan sharding
	ErrInvalidNonShardedPoolName = "pool is not a valid sync.Pool"   // Error untuk pool yang bukan tipe sync.Pool
	ErrInvalidPoolConfigType     = "invalid pool config type"        // Error untuk konfigurasi pool yang tidak valid
	ErrInvalidFactoryType        = "invalid factory type"            // Error untuk tipe factory yang tidak valid
)

Error constants untuk berbagai jenis kesalahan pada PoolManager Konstanta ini digunakan sebagai pesan dasar untuk error yang mungkin terjadi dalam pengelolaan pool, termasuk kesalahan saat pool tidak ditemukan atau tidak valid.

View Source
const (
	NoEvictionPolicy      = "no_eviction"
	DefaultEvictionPolicy = "default_eviction"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type EventType added in v1.1.0

type EventType int
const (
	EventAcquire EventType = iota
	EventRelease
	EventEvict
)

type EvictionPolicy

type EvictionPolicy interface {
	// ShouldEvict mengevaluasi apakah objek harus dieviksikan
	// key: kunci unik dari objek yang dievaluasi
	// metadata: metadata dari objek yang digunakan untuk mengevaluasi kebijakan eviksi
	// Mengembalikan nilai true jika objek harus dieviksikan, false jika tidak.
	ShouldEvict(key string, metadata *PoolItemMetadata) bool

	// Evict mengevaluasi apakah objek harus dieviksikan
	// poolType: tipe pool dari mana item akan dihapus
	// Fungsi ini mencari item dengan waktu terakhir digunakan paling lama dan menghapusnya dari cache dan metadata.
	Evict(poolType string, pm *PoolManager)
}

EvictionPolicy interface untuk kebijakan eviksi EvictionPolicy mendefinisikan metode ShouldEvict, yang digunakan untuk menentukan apakah suatu objek dalam pool harus dihapus berdasarkan kebijakan eviksi tertentu.

type HashSharding added in v1.1.0

type HashSharding struct{}

HashSharding implements hash-based strategy

func (*HashSharding) GetShardIndex added in v1.1.0

func (h *HashSharding) GetShardIndex(poolType string, shardCount int, key string) int

type LFUEvictionPolicy

type LFUEvictionPolicy struct {
	MinFrequency int // Batas minimum frekuensi penggunaan untuk mempertahankan objek
}

LFUEvictionPolicy mengimplementasikan kebijakan eviksi Least Frequently Used (LFU) Kebijakan ini akan menghapus objek yang jarang digunakan.

func (*LFUEvictionPolicy) ShouldEvict

func (p *LFUEvictionPolicy) ShouldEvict(key string, metadata *PoolItemMetadata) bool

ShouldEvict mengevaluasi apakah objek harus dieviksikan berdasarkan frekuensi penggunaan key: kunci unik dari objek yang dievaluasi metadata: metadata objek yang digunakan untuk evaluasi Mengembalikan nilai true jika frekuensi penggunaan objek kurang dari MinFrequency.

type LRUEvictionPolicy

type LRUEvictionPolicy struct {
	MaxIdleTime time.Duration // Batas waktu idle untuk objek
}

LRUEvictionPolicy mengimplementasikan kebijakan eviksi Least Recently Used (LRU) Kebijakan ini akan menghapus objek yang sudah tidak digunakan dalam jangka waktu tertentu.

func (*LRUEvictionPolicy) Evict added in v1.1.0

func (p *LRUEvictionPolicy) Evict(poolType string, pm *PoolManager)

func (*LRUEvictionPolicy) ShouldEvict

func (p *LRUEvictionPolicy) ShouldEvict(key string, metadata *PoolItemMetadata) bool

ShouldEvict mengevaluasi apakah objek harus dieviksikan berdasarkan waktu terakhir digunakan key: kunci unik dari objek yang dievaluasi metadata: metadata objek yang digunakan untuk evaluasi Mengembalikan nilai true jika waktu idle sejak penggunaan terakhir melebihi MaxIdleTime.

type LocalCache added in v1.1.0

type LocalCache struct {
	// contains filtered or unexported fields
}

func (*LocalCache) Get added in v1.1.0

func (lc *LocalCache) Get(key string) (interface{}, bool)

func (*LocalCache) Set added in v1.1.0

func (lc *LocalCache) Set(key string, value interface{})

type LogLevel added in v1.1.0

type LogLevel int

LogLevel mendefinisikan tingkat log yang didukung

const (
	DebugLevel LogLevel = iota
	InfoLevel
	WarningLevel
	ErrorLevel
)

type MetricsCallback

type MetricsCallback func(poolType, action string, metrics PoolMetrics)

MetricsCallback digunakan untuk mencatat metrik secara custom Callback ini memungkinkan pengguna untuk mencatat atau memonitor metrik penggunaan pool secara kustom berdasarkan tipe pool dan tindakan yang terjadi.

type MonitoringConfig

type MonitoringConfig struct {
	EnableLogging     bool                 // Menentukan apakah logging diaktifkan
	LogFunc           func(message string) // Fungsi untuk mencatat log
	CustomMetricsFunc MetricsCallback      // Fungsi untuk mencatat metrik secara kustom
	LogLevel          LogLevel
	OnEvent           func(event PoolEvent)
}

MonitoringConfig untuk mengatur konfigurasi monitoring MonitoringConfig menyediakan konfigurasi untuk logging dan pencatatan metrik kustom, termasuk apakah logging diaktifkan (EnableLogging), fungsi logging (LogFunc), dan fungsi pencatatan metrik kustom (CustomMetricsFunc).

type PoolAble

type PoolAble interface {
	// Reset mengatur ulang kondisi objek ke keadaan semula sebelum dikembalikan ke pool.
	// Metode ini memungkinkan objek untuk digunakan kembali tanpa meninggalkan data sebelumnya.
	Reset()
}

PoolAble adalah interface yang HARUS DIIMPLEMENTASIKAN oleh struct yang ingin menggunakan pooling. Interface ini menentukan bahwa struct harus memiliki metode Reset() untuk mengatur ulang kondisi objek sebelum dikembalikan ke pool.

type PoolConfigBuilder

type PoolConfigBuilder struct {
	// contains filtered or unexported fields
}

PoolConfigBuilder digunakan untuk membangun konfigurasi pool menggunakan pola builder dengan chaining.

func NewPoolConfiguration added in v1.1.0

func NewPoolConfiguration(poolName string) *PoolConfigBuilder

NewPoolConfiguration membuat instance PoolConfigBuilder baru dengan konfigurasi default minimal. Menetapkan beberapa nilai default, seperti ukuran pool dan pengaturan lainnya.

func (*PoolConfigBuilder) Build

Build menghasilkan objek PoolConfiguration berdasarkan konfigurasi yang telah diatur pada builder.

func (*PoolConfigBuilder) WithAutoTune

func (b *PoolConfigBuilder) WithAutoTune(autoTune bool) *PoolConfigBuilder

WithAutoTune mengaktifkan atau menonaktifkan auto-tuning pada pool.

func (*PoolConfigBuilder) WithAutoTuneFactor

func (b *PoolConfigBuilder) WithAutoTuneFactor(factor float64) *PoolConfigBuilder

WithAutoTuneFactor menetapkan faktor peningkatan ukuran saat auto-tuning.

func (*PoolConfigBuilder) WithCacheMaxSize

func (b *PoolConfigBuilder) WithCacheMaxSize(cacheMaxSize int) *PoolConfigBuilder

WithCacheMaxSize menetapkan ukuran maksimum cache yang dapat digunakan.

func (*PoolConfigBuilder) WithEnableCaching

func (b *PoolConfigBuilder) WithEnableCaching(enableCaching bool) *PoolConfigBuilder

WithEnableCaching mengaktifkan atau menonaktifkan caching pada pool.

func (*PoolConfigBuilder) WithEvictionInterval

func (b *PoolConfigBuilder) WithEvictionInterval(evictionInterval time.Duration) *PoolConfigBuilder

WithEvictionInterval menetapkan interval waktu untuk menjalankan eviksi pada pool.

func (*PoolConfigBuilder) WithEvictionPolicy

func (b *PoolConfigBuilder) WithEvictionPolicy(evictionPolicy EvictionPolicy) *PoolConfigBuilder

WithEvictionPolicy menetapkan kebijakan eviksi yang digunakan.

func (*PoolConfigBuilder) WithInitialSize

func (b *PoolConfigBuilder) WithInitialSize(initialSize int) *PoolConfigBuilder

WithInitialSize menetapkan ukuran awal pool saat diinisialisasi.

func (*PoolConfigBuilder) WithMaxSize added in v1.1.0

func (b *PoolConfigBuilder) WithMaxSize(maxSize int) *PoolConfigBuilder

func (*PoolConfigBuilder) WithMinSize added in v1.1.0

func (b *PoolConfigBuilder) WithMinSize(minSize int) *PoolConfigBuilder

func (*PoolConfigBuilder) WithOnAutoTune added in v1.1.0

func (b *PoolConfigBuilder) WithOnAutoTune(onAutoTune func(poolType string, newSize int)) *PoolConfigBuilder

func (*PoolConfigBuilder) WithOnCreate added in v1.1.0

func (b *PoolConfigBuilder) WithOnCreate(onCreate func(poolType string, instance PoolAble)) *PoolConfigBuilder

func (*PoolConfigBuilder) WithOnGet added in v1.1.0

func (b *PoolConfigBuilder) WithOnGet(onGet func(poolType string)) *PoolConfigBuilder

func (*PoolConfigBuilder) WithOnPut added in v1.1.0

func (b *PoolConfigBuilder) WithOnPut(onPut func(poolType string)) *PoolConfigBuilder

func (*PoolConfigBuilder) WithOnReset added in v1.1.0

func (b *PoolConfigBuilder) WithOnReset(onReset func(poolType string, instance PoolAble)) *PoolConfigBuilder

func (*PoolConfigBuilder) WithSharding

func (b *PoolConfigBuilder) WithSharding(enabled bool, shardCount int) *PoolConfigBuilder

WithSharding mengaktifkan atau menonaktifkan sharding.

func (*PoolConfigBuilder) WithSizeLimit

func (b *PoolConfigBuilder) WithSizeLimit(sizeLimit int) *PoolConfigBuilder

WithSizeLimit menetapkan batas maksimum jumlah objek yang dapat disimpan dalam pool.

func (*PoolConfigBuilder) WithTTL

WithTTL menetapkan Time-to-Live (TTL) untuk kebijakan eviksi pada pool.

type PoolConfiguration added in v1.1.0

type PoolConfiguration struct {
	Name                  string                                   // Nama pool
	SizeLimit             int                                      // Batas maksimum jumlah objek dalam pool
	MinSize               int                                      // Batas minimum jumlah objek dalam pool
	MaxSize               int                                      // Batas maksimum ukuran pool saat auto-tuning
	InitialSize           int                                      // Ukuran awal pool ketika diinisialisasi
	AutoTune              bool                                     // Menentukan apakah auto-tuning diaktifkan atau tidak
	AutoTuneInterval      time.Duration                            // Interval waktu untuk menjalankan auto-tuning
	AutoTuneFactor        float64                                  // Faktor peningkatan ukuran saat auto-tuning diaktifkan
	AutoTuneDynamicFactor func(currentSize int) float64            // Fungsi dinamis untuk faktor auto-tuning
	EnableCaching         bool                                     // Menentukan apakah caching diaktifkan
	CacheMaxSize          int                                      // Batas maksimum jumlah objek dalam cache
	ShardingEnabled       bool                                     // Menentukan apakah sharding diaktifkan
	ShardCount            int                                      // Jumlah shard yang digunakan untuk sharding
	ShardStrategy         ShardingStrategy                         // Strategi sharding yang digunakan
	TTL                   time.Duration                            // Time-to-live untuk kebijakan eviksi pada objek yang tidak digunakan
	Eviction              EvictionPolicy                           // Kebijakan eviksi untuk menghapus objek dari pool
	EvictionInterval      time.Duration                            // Interval waktu untuk menjalankan eviksi
	KeyGenerator          func() string                            // Fungsi untuk menghasilkan kunci khusus
	OnGet                 func(poolType string)                    // Callback yang dipanggil saat objek diambil dari pool
	OnPut                 func(poolType string)                    // Callback yang dipanggil saat objek dikembalikan ke pool
	OnEvict               func(poolType string)                    // Callback yang dipanggil saat objek dihapus dari pool
	OnAutoTune            func(poolType string, newSize int)       // Callback yang dipanggil saat auto-tuning terjadi
	OnCreate              func(poolType string, instance PoolAble) // Callback yang dipanggil saat objek dibuat
	OnDestroy             func(poolType string, instance PoolAble) // Callback yang dipanggil saat objek dihancurkan
	OnReset               func(poolType string, instance PoolAble) // Callback yang dipanggil saat objek direset
	OnShard               func(poolType string, shardIndex int)    // Callback yang dipanggil saat sharding terjadi
	OnCacheHit            func(poolType string)                    // Callback yang dipanggil saat objek ditemukan
	OnError               func(poolType string, err error)         // Callback yang dipanggil saat terjadi error
}

PoolConfiguration digunakan untuk mengatur konfigurasi pool, seperti batas ukuran, auto-tuning, dan sharding Konfigurasi ini memungkinkan penyesuaian perilaku pool, termasuk pengaturan cache dan kebijakan eviksi. PoolConfiguration digunakan untuk mengatur konfigurasi pool, termasuk jenis key dan pemrosesannya

func (*PoolConfiguration) Validate added in v1.1.0

func (config *PoolConfiguration) Validate() error

Validate memeriksa apakah konfigurasi pool valid.

type PoolError

type PoolError struct {
	PoolName  string // Tipe pool tempat kesalahan terjadi
	Operation string // Operasi yang gagal dijalankan
	Err       error  // Error asli yang menyebabkan kegagalan
}

PoolError adalah tipe error khusus yang digunakan untuk mencatat kesalahan pada operasi PoolManager PoolError menyimpan informasi tentang tipe pool, operasi yang gagal, dan error asli yang menyebabkan kegagalan.

func NewPoolError

func NewPoolError(poolName, operation string, err error) *PoolError

NewPoolError membuat instance PoolError baru dengan informasi tentang poolName, operasi, dan error yang terjadi poolName: tipe pool yang menyebabkan kesalahan operation: nama operasi yang menyebabkan kesalahan (misalnya "add", "get", atau "put") err: error asli yang menyebabkan kegagalan Fungsi ini mengembalikan pointer ke PoolError yang baru dibuat.

func (*PoolError) Error

func (e *PoolError) Error() string

Error mengimplementasikan interface error dan mengembalikan pesan kesalahan yang lebih terperinci Fungsi ini membuat pesan error yang menjelaskan jenis pool, operasi yang gagal, dan error asli.

func (*PoolError) Unwrap

func (e *PoolError) Unwrap() error

Unwrap mengembalikan error asli dari PoolError Fungsi ini memungkinkan pengguna untuk mendapatkan error yang terbungkus dalam PoolError dengan menggunakan fungsi errors.Unwrap().

type PoolEvent added in v1.1.0

type PoolEvent struct {
	Type     EventType
	PoolName string
	Item     interface{}
}

type PoolItemMetadata

type PoolItemMetadata struct {
	PoolName         string            // Nama pool yang mengelola item
	LastUsed         time.Time         // Terakhir kali item digunakan
	Frequency        int               // Frekuensi penggunaan item
	CreationTime     time.Time         // Waktu pembuatan item
	ExpirationTime   *time.Time        // Waktu kadaluarsa item (opsional)
	UsageDuration    time.Duration     // Total durasi penggunaan item
	Status           string            // Status item (misalnya, "Active", "Idle", "Evicted")
	OwnerID          string            // ID pemilik saat ini (opsional)
	AccessCount      int               // Jumlah total akses (penggunaan) item
	IdleDuration     time.Duration     // Durasi waktu item idle
	MaxUsageDuration time.Duration     // Batas maksimal waktu penggunaan
	IsPooled         bool              // Apakah item sedang berada di pool atau sedang digunakan
	Tag              map[string]string // Tag untuk penyimpanan informasi tambahan
	LastResetTime    time.Time         // Waktu terakhir item di-reset
}

PoolItemMetadata menyimpan informasi yang digunakan untuk kebijakan eviksi Metadata ini mencakup berbagai atribut yang membantu menentukan kapan item di dalam pool harus dieviksikan atau dianggap tidak lagi aktif.

type PoolManager

type PoolManager struct {
	// contains filtered or unexported fields
}

PoolManager adalah struct untuk mengelola pooling objek Menyediakan fitur seperti auto-tuning, sharding, caching, dan eviksi

func NewPoolManager

func NewPoolManager(config PoolConfiguration) *PoolManager

NewPoolManager membuat instance PoolManager baru dengan logger default Menginisialisasi channel autoTuneStop dan logger

func (*PoolManager) AcquireInstance

func (pm *PoolManager) AcquireInstance(poolName string) (PoolAble, error)

AcquireInstance mengambil instance dari pool dengan tipe tertentu poolName: tipe pool tempat mengambil instance Mengembalikan objek PoolAble dan error jika terjadi kesalahan

func (*PoolManager) AddItemMetadata added in v1.1.0

func (pm *PoolManager) AddItemMetadata(poolName, key string)

func (*PoolManager) AddPool

func (pm *PoolManager) AddPool(poolName string, factory func() PoolAble, config PoolConfiguration) error

AddPool menambahkan pool baru dengan tipe tertentu dan konfigurasi yang ditentukan poolName: tipe pool yang ditambahkan factory: fungsi untuk membuat objek baru dalam pool config: konfigurasi untuk pool yang ditambahkan

func (*PoolManager) AddShard added in v1.1.0

func (pm *PoolManager) AddShard()

AddShard menambahkan shard baru ke PoolManager

func (*PoolManager) Clear added in v1.1.0

func (pm *PoolManager) Clear()

Clear membersihkan semua pool

func (*PoolManager) ForceEvict added in v1.1.0

func (pm *PoolManager) ForceEvict(poolName, key string) error

ForceEvict secara paksa menghapus objek dari pool berdasarkan kunci

func (*PoolManager) GetItemMetadata

func (pm *PoolManager) GetItemMetadata(key string) (*PoolItemMetadata, bool)

GetItemMetadata mengambil metadata item jika tersedia key: kunci unik yang mengidentifikasi item dalam metadata map Mengembalikan metadata item dan boolean yang menunjukkan apakah metadata ditemukan.

func (*PoolManager) GetPoolSize added in v1.1.0

func (pm *PoolManager) GetPoolSize(poolName string) int

GetPoolSize mengembalikan ukuran pool saat ini

func (*PoolManager) GetPoolUsage added in v1.1.0

func (pm *PoolManager) GetPoolUsage(poolType string) (int32, error)

GetPoolUsage mengakses metrik penggunaan pool secara langsung dari sync.Map.

func (*PoolManager) GetShardSize added in v1.1.0

func (pm *PoolManager) GetShardSize(poolName string, shardIndex int) int

GetShardSize mengembalikan ukuran shard tertentu

func (*PoolManager) HandleError added in v1.1.0

func (pm *PoolManager) HandleError(err error)

HandleError mengatur bagaimana error diproses

func (*PoolManager) InitializePool added in v1.1.0

func (pm *PoolManager) InitializePool(poolName string, config PoolConfiguration, factory func() interface{}) error

InitializePool menginisialisasi pool baru dengan konfigurasi yang diberikan. poolName: tipe objek pool yang ingin dibuat. config: konfigurasi pool yang digunakan. factory: fungsi untuk membuat objek baru yang akan dimasukkan ke dalam pool. InitializePool menginisialisasi pool baru dengan konfigurasi yang diberikan.

func (*PoolManager) ReleaseInstance

func (pm *PoolManager) ReleaseInstance(poolName string, instance PoolAble) error

ReleaseInstance mengembalikan instance ke pool dengan tipe tertentu poolName: tipe pool tempat mengembalikan instance instance: objek yang akan dikembalikan ke pool

func (*PoolManager) RemovePool

func (pm *PoolManager) RemovePool(poolName string) error

RemovePool menghapus pool tertentu berdasarkan tipe

func (*PoolManager) RemoveShard added in v1.1.0

func (pm *PoolManager) RemoveShard() error

RemoveShard menghapus shard jika jumlah shard lebih dari 0

func (*PoolManager) Reset added in v1.1.0

func (pm *PoolManager) Reset(poolName string) error

Reset mengatur ulang objek dalam pool

func (*PoolManager) ResetItemMetadata added in v1.1.0

func (pm *PoolManager) ResetItemMetadata(key string)

func (*PoolManager) ResizePool added in v1.1.0

func (pm *PoolManager) ResizePool(poolName string, newSize int)

func (*PoolManager) SetEvictionPolicy added in v1.1.0

func (pm *PoolManager) SetEvictionPolicy(policy EvictionPolicy)

SetEvictionPolicy mengganti kebijakan eviksi yang digunakan oleh PoolManager

func (*PoolManager) SetLogLevel added in v1.1.0

func (pm *PoolManager) SetLogLevel(level LogLevel)

SetLogLevel mengatur tingkat log untuk PoolManager

func (*PoolManager) SetMonitoringConfig

func (pm *PoolManager) SetMonitoringConfig(config MonitoringConfig)

SetMonitoringConfig menetapkan konfigurasi monitoring untuk PoolManager MonitoringConfig digunakan untuk mengatur bagaimana log dan metrik dicatat

func (*PoolManager) SetShardingStrategy added in v1.1.0

func (pm *PoolManager) SetShardingStrategy(strategy ShardingStrategy)

SetShardingStrategy menetapkan strategi sharding yang akan digunakan oleh PoolManager. strategy: strategi sharding yang diimplementasikan oleh pengguna.

func (*PoolManager) ShouldEvictItem added in v1.1.0

func (pm *PoolManager) ShouldEvictItem(key string, metadata *PoolItemMetadata) bool

func (*PoolManager) StartAutoTuning added in v1.1.0

func (pm *PoolManager) StartAutoTuning()

func (*PoolManager) StopAutoTuning added in v1.1.0

func (pm *PoolManager) StopAutoTuning()

StopAutoTuning menghentikan proses auto-tuning pada PoolManager

func (*PoolManager) UpdateIdleDuration added in v1.1.0

func (pm *PoolManager) UpdateIdleDuration(key string)

func (*PoolManager) UpdateItemMetadata

func (pm *PoolManager) UpdateItemMetadata(poolName, key string)

UpdateItemMetadata memperbarui metadata item saat diakses key: kunci unik yang mengidentifikasi item dalam metadata map Fungsi ini memperbarui informasi seperti waktu terakhir digunakan, frekuensi penggunaan, dan durasi penggunaan berdasarkan waktu yang telah berlalu sejak terakhir kali item digunakan.

type PoolMetrics

type PoolMetrics struct {
	TotalGets    int64 // Total jumlah objek yang diambil dari pool
	TotalPuts    int64 // Total jumlah objek yang dikembalikan ke pool
	TotalEvicts  int64 // Total jumlah objek yang dihapus dari pool
	CurrentUsage int32 // Jumlah objek yang sedang digunakan
}

PoolMetrics untuk mencatat metrik penggunaan pool PoolMetrics menyimpan data mengenai jumlah operasi yang dilakukan pada pool, termasuk berapa kali objek diambil (TotalGets), dikembalikan (TotalPuts), dihapus (TotalEvicts), dan jumlah penggunaan pool saat ini (CurrentUsage).

type RandomSharding added in v1.1.0

type RandomSharding struct {
	// contains filtered or unexported fields
}

RandomSharding implements random strategy

func NewRandomSharding added in v1.1.0

func NewRandomSharding() *RandomSharding

NewRandomSharding membuat instance baru dari RandomSharding

func (*RandomSharding) GetShardIndex added in v1.1.0

func (r *RandomSharding) GetShardIndex(poolType string, shardCount int, key string) int

type RoundRobinSharding added in v1.1.0

type RoundRobinSharding struct {
	// contains filtered or unexported fields
}

RoundRobinSharding implements round-robin strategy

func (*RoundRobinSharding) GetShardIndex added in v1.1.0

func (rr *RoundRobinSharding) GetShardIndex(poolType string, shardCount int, key string) int

type ShardingStrategy added in v1.1.0

type ShardingStrategy interface {
	GetShardIndex(poolType string, shardCount int, key string) int
}

type SmartEvictionPolicy

type SmartEvictionPolicy struct {
	TTL          time.Duration // Batas waktu TTL untuk eviksi
	MaxIdleTime  time.Duration // Batas waktu idle untuk LRU
	MinFrequency int           // Batas frekuensi untuk LFU
}

SmartEvictionPolicy menggabungkan kebijakan eviksi berbasis TTL, LRU, dan LFU Kebijakan ini memungkinkan eviksi objek berdasarkan tiga parameter: batas waktu hidup (TTL), waktu idle maksimum (MaxIdleTime), dan frekuensi minimum penggunaan (MinFrequency).

func (*SmartEvictionPolicy) Evict added in v1.1.0

func (p *SmartEvictionPolicy) Evict(poolType string, pm *PoolManager)

Implementasi Evict untuk SmartEvictionPolicy

func (*SmartEvictionPolicy) ShouldEvict

func (p *SmartEvictionPolicy) ShouldEvict(key string, metadata *PoolItemMetadata) bool

ShouldEvict mengevaluasi apakah objek harus dieviksikan berdasarkan kombinasi kebijakan key: kunci unik dari objek yang dievaluasi metadata: metadata objek yang digunakan untuk evaluasi Mengembalikan nilai true jika salah satu dari ketentuan berikut terpenuhi: - Waktu sejak penggunaan terakhir melebihi TTL - Waktu idle melebihi MaxIdleTime - Frekuensi penggunaan kurang dari MinFrequency

type TTLEvictionPolicy

type TTLEvictionPolicy struct {
	TTL time.Duration // Batas waktu TTL untuk objek yang dieviksikan
}

TTLEvictionPolicy mengimplementasikan kebijakan eviksi berdasarkan TTL Kebijakan ini akan menghapus objek yang sudah tidak digunakan dalam jangka waktu tertentu.

func (*TTLEvictionPolicy) Evict added in v1.1.0

func (p *TTLEvictionPolicy) Evict(poolType string, pm *PoolManager)

Evict mengevaluasi apakah objek harus dieviksikan poolType: tipe pool dari mana item akan dihapus Fungsi ini mencari item dengan TTL terakhir digunakan paling lama dan menghapusnya dari cache dan metadata.

func (*TTLEvictionPolicy) ShouldEvict

func (p *TTLEvictionPolicy) ShouldEvict(key string, metadata *PoolItemMetadata) bool

ShouldEvict mengevaluasi apakah objek harus dieviksikan berdasarkan TTL key: kunci unik dari objek yang dievaluasi metadata: metadata objek yang digunakan untuk evaluasi Mengembalikan nilai true jika waktu sejak penggunaan terakhir melebihi batas TTL.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL