The commit modernizes the caching implementation by introducing a pluggable store interface that allows different cache backends. Key changes: - Add Store interface for custom cache implementations - Create default TTL-based store for backwards compatibility - Add example LRU store for memory-bounded caching - Support cache store configuration via options pattern - Make cache cleanup logic implementation-specific - Add comprehensive tests and documentation The main goals were to: 1. Prevent unbounded memory growth through pluggable stores 2. Enable distributed caching support 3. Maintain backwards compatibility 4. Improve testability and maintainability Signed-off-by: franchb <hello@franchb.com>
27 lines
847 B
Go
27 lines
847 B
Go
package cache
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// Store defines the interface for a pluggable cache.
|
|
// This allows users to provide their own caching implementations, such as LRU, LFU,
|
|
// or even distributed caches. The cache implementation is responsible for handling
|
|
// its own eviction policies (TTL, size limits, etc.).
|
|
type Store[K comparable, V any] interface {
|
|
// Set adds or updates an entry in the cache. The implementation should handle the TTL.
|
|
Set(key K, value V, ttl time.Duration)
|
|
|
|
// Get retrieves an entry from the cache. The boolean return value indicates
|
|
// whether the key was found and has not expired.
|
|
Get(key K) (V, bool)
|
|
|
|
// Delete removes an entry from the cache.
|
|
Delete(key K)
|
|
|
|
// Purge removes all items from the cache.
|
|
Purge()
|
|
|
|
// Close releases any resources used by the cache, such as background goroutines.
|
|
Close()
|
|
}
|