Documentation
¶
Index ¶
- type Cache
- type CloneFunc
- type InMemoryCache
- func (c *InMemoryCache[K, V]) Close() error
- func (c *InMemoryCache[K, V]) Delete(_ context.Context, key K)
- func (c *InMemoryCache[K, V]) Get(_ context.Context, key K) (V, bool)
- func (c *InMemoryCache[K, V]) Set(_ context.Context, key K, value V, opts ...SetOption)
- func (c *InMemoryCache[K, V]) Stats() Stats
- type InMemoryOption
- type SetOption
- type SetOptions
- type Stats
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Cache ¶
type Cache[K comparable, V any] interface { // Get mengambil nilai untuk key tertentu. // Mengembalikan (nilai, true) jika ditemukan dan belum kedaluwarsa; jika tidak, (zero, false). Get(ctx context.Context, key K) (V, bool) // Set menyimpan nilai untuk key tertentu, menggantikan nilai yang sudah ada. // Implementasi sebaiknya menerapkan SetOptions (mis. TTL/ExpiresAt) jika diberikan. Set(ctx context.Context, key K, value V, opts ...SetOption) // Delete menghapus nilai untuk key tertentu jika ada. Delete(ctx context.Context, key K) // Stats mengembalikan ringkasan statistik cache saat ini. Stats() Stats // Close melepaskan resource apa pun yang digunakan cache. // Implementasi yang tidak memegang resource eksternal dapat mengembalikan nil. Close() error }
Cache adalah antarmuka cache generik yang aman terhadap konkurensi. Implementasi bebas memilih kebijakan pengusiran (mis. LRU) dan dapat mendukung TTL melalui SetOptions.
K harus comparable agar implementasi dapat menggunakannya sebagai key map. V adalah tipe nilai apa pun yang disimpan di cache.
type CloneFunc ¶
type CloneFunc[V any] func(V) V
CloneFunc secara opsional mengkloning nilai pada Set/Get untuk mencegah mutasi eksternal mempengaruhi keadaan cache.
type InMemoryCache ¶
type InMemoryCache[K comparable, V any] struct { // contains filtered or unexported fields }
InMemoryCache adalah cache LRU generik yang aman terhadap konkurensi dengan dukungan TTL. - K harus comparable. - V adalah tipe nilai apa pun. - TTL diterapkan per entri (absolut atau relatif melalui SetOptions). - Kebijakan pengusiran adalah LRU saat mencapai batas kapasitas; kedaluwarsa TTL ditegakkan secara malas saat Get.
Model konkurensi: - Keadaan internal (map + daftar LRU) dilindungi oleh mutex. - Penghitung statistik menggunakan atomic untuk mengurangi kontensi.
func NewInMemoryCache ¶
func NewInMemoryCache[K comparable, V any](capacity int, defaultTTL time.Duration, opts ...InMemoryOption[K, V]) *InMemoryCache[K, V]
NewInMemoryCache membuat cache LRU dalam memori yang bersifat generik. - capacity: jumlah maksimum entri yang dipertahankan. Jika <= 0, dibatasi menjadi 1. - defaultTTL: jika > 0, entri yang diset tanpa TTL/ExpiresAt eksplisit akan default ke now+defaultTTL. - opts: opsi tambahan seperti cloner untuk nilai.
func (*InMemoryCache[K, V]) Close ¶
func (c *InMemoryCache[K, V]) Close() error
Close melepaskan resource apa pun yang digunakan oleh cache. Untuk implementasi dalam memori tidak ada resource eksternal.
func (*InMemoryCache[K, V]) Delete ¶
func (c *InMemoryCache[K, V]) Delete(_ context.Context, key K)
Delete menghapus nilai untuk key tertentu jika ada.
func (*InMemoryCache[K, V]) Get ¶
func (c *InMemoryCache[K, V]) Get(_ context.Context, key K) (V, bool)
Get mengambil nilai untuk key tertentu. Mengembalikan (nilai, true) jika ditemukan dan belum kedaluwarsa; jika tidak, (zero, false).
func (*InMemoryCache[K, V]) Set ¶
func (c *InMemoryCache[K, V]) Set(_ context.Context, key K, value V, opts ...SetOption)
Set menyimpan nilai untuk key tertentu, menggantikan nilai yang sudah ada. Menerapkan prioritas SetOptions: ExpiresAt > TTL > defaultTTL.
func (*InMemoryCache[K, V]) Stats ¶
func (c *InMemoryCache[K, V]) Stats() Stats
Stats mengembalikan snapshot statistik cache saat ini.
type InMemoryOption ¶
type InMemoryOption[K comparable, V any] func(*InMemoryCache[K, V])
InMemoryOption mengonfigurasi InMemoryCache.
func WithCloner ¶
func WithCloner[K comparable, V any](fn CloneFunc[V]) InMemoryOption[K, V]
WithCloner menetapkan cloner defensif untuk nilai V guna mencegah mutasi eksternal terhadap keadaan cache. Jika disediakan, cloner digunakan pada Set dan Get.
type SetOption ¶
type SetOption func(*SetOptions)
SetOption memodifikasi SetOptions; digunakan dengan pola functional options.
func WithExpiresAt ¶
WithExpiresAt menetapkan waktu kedaluwarsa absolut untuk entri cache. Ini memiliki prioritas dibanding TTL jika keduanya diberikan.
type SetOptions ¶
type SetOptions struct {
// TTL menentukan time-to-live relatif untuk entri.
// Implementasi sebaiknya menghitung ExpiresAt = now()+TTL saat menerapkan opsi ini.
TTL time.Duration
// ExpiresAt menentukan waktu kedaluwarsa absolut untuk entri.
// Jika tidak nol, ini memiliki prioritas dibanding TTL.
ExpiresAt time.Time
}
SetOptions membawa perilaku opsional untuk Set (mis. TTL/ExpiresAt). Implementasi sebaiknya menerapkan ExpiresAt jika tidak nol; jika tidak, bila TTL > 0, ExpiresAt dihitung sebagai now()+TTL saat Set dipanggil.
Jika ExpiresAt dan TTL keduanya nol, entri tidak kedaluwarsa kecuali implementasi menerapkan kebijakan TTL bawaan.
type Stats ¶
type Stats struct {
// Hits adalah jumlah hit cache.
Hits uint64
// Misses adalah jumlah miss cache.
Misses uint64
// Evictions adalah jumlah entri yang dieliminasi karena kapasitas/TTL.
Evictions uint64
// Items adalah jumlah item saat ini yang disimpan di cache.
Items int
// Capacity adalah jumlah maksimum item yang akan dipertahankan cache.
Capacity int
}
Stats menyediakan metrik dasar untuk implementasi cache dalam proses.