diff options
| author | 2026-06-09 05:15:58 +0000 | |
|---|---|---|
| committer | 2026-06-09 05:15:58 +0000 | |
| commit | 55676a35757bcbf2fa40cc3fd144ba412c65b658 (patch) | |
| tree | 4c75c8497941d7b8c8c5530f5467bf42610c3f10 /internal/cache/clock/cache_ops.go | |
| parent | internal/lru: Add sharded CLOCK (diff) | |
| signature | No signature | |
internal/cache: add (and move clock to internal/cache/clock)
Diffstat (limited to 'internal/cache/clock/cache_ops.go')
| -rw-r--r-- | internal/cache/clock/cache_ops.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/internal/cache/clock/cache_ops.go b/internal/cache/clock/cache_ops.go new file mode 100644 index 00000000..18958202 --- /dev/null +++ b/internal/cache/clock/cache_ops.go @@ -0,0 +1,51 @@ +package clock + +// Add inserts or replaces key, marking it recently used. +// +// It reports whether the entry was admitted; +// an entry heavier than the per-shard budget is rejected +// and leaves the cache unchanged. +func (cache *Cache[K, V]) Add(key K, value V) bool { + return cache.shardFor(key).add(key, value, cache.weightFn(key, value)) +} + +// Get returns the value for key and marks it recently used. +// +//nolint:ireturn +func (cache *Cache[K, V]) Get(key K) (V, bool) { + return cache.shardFor(key).get(key) +} + +// Peek returns the value for key without changing its recency. +// +//nolint:ireturn +func (cache *Cache[K, V]) Peek(key K) (V, bool) { + return cache.shardFor(key).peek(key) +} + +// Len returns the number of cached entries. +func (cache *Cache[K, V]) Len() int { + total := 0 + for _, shard := range cache.shards { + total += shard.len() + } + + return total +} + +// Weight returns the current total weight across all shards. +func (cache *Cache[K, V]) Weight() uint64 { + var total uint64 + for _, shard := range cache.shards { + total += shard.loadWeight() + } + + return total +} + +// Clear removes all entries. +func (cache *Cache[K, V]) Clear() { + for _, shard := range cache.shards { + shard.clear() + } +} |
