Inmemory cache with classic algorythms
Универсальный in-memory кэш на Go с поддержкой дженериков, стратегий вытеснения (TTL, LRU, LFU), автоматической очистки просроченных значений и явной инвалидации.
-
Get(k K) (V, bool) — получить значение по ключу, проверяется TTL.
-
Set(k K, v V) — установить или обновить значение с установкой времени жизни.
-
Invalidate(k K) — явное удаление ключа из кэша.
-
Stop() — корректно остановить фоновый воркер, удаляющий просроченные записи.
Поддерживаются три реализации:
-
TTLCache — TTL-кэш без ограничения размера.
-
LRUCache — вытеснение по наименее недавно использованным записям + TTL.
-
LFUCache — вытеснение по наименее часто использованным записям + TTL, с возможностью сброса счётчика при перезаписи.
Установка
go get github.com/lifedaemon-kill/fast-cachepackage main
import (
"github.com/lifedaemon-kill/fast-cache"
"time"
)
func main() {
// TTL-кэш: TTL = 60s
ttl := cache.NewTTLCache[string, MyStruct](60 * time.Second)
defer ttl.Stop()
ttl.Set("key1", MyStruct{...})
if v, ok := ttl.Get("key1"); ok {
// используем v
}
ttl.Invalidate("key1")
// LRU-кэш: TTL = 30s, capacity = 100 элементов
lru := cache.NewLRUCache[int, MyStruct](30*time.Second, 100)
defer lru.Stop()
// LFU-кэш: TTL = 5m, capacity = 50 элементов
lfu := cache.NewLFUCache[int, MyStruct](5*time.Minute, 50)
defer lfu.Stop()
// Фабрика
conf := cache.Config{
Strategy: cache.StrategyLRU,
TTL: 1 * time.Minute,
Capacity: 5,
}
memcache := cache.New[int, string](conf)
}Ручной