Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fast-cache

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-cache

Пример использования

package 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)
}

Механизм инвалидации:

Ручной

About

Inmemory cache with classic algorythms. Open for pull-requests

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages