LRU_Cache реализует следующий интерфейс:
type ICache interface {
Add(key string, value interface{})
Get(key string) (value interface{}, ok bool)
Remove(key string)
}
LRU_Cache помещает новые или уже существующие запрашиваемые элементы в начало связного списка. Если кэш заполнен, то последний элемент удаляется. Таким образом, из кэша вытесняются значения, которые дольше всего не запрашивались.
LRU_Cache_WithTTL реализует следующий интерфейс:
type ICache interface {
Cap() int
Clear()
Add(key string, value interface{})
AddWithTTL(key string, value interface{}, ttl time.Duration)
Get(key string) (value interface{}, ok bool)
Remove(key string)
}
LRU_Cache_WithTTL работает по такому же принципу, что и LRU_Cache, но также имеет возможность добавлять элементы с определенным временным лимитом на хранение. Это достигается за счет того, что при создании кэша запускается горутина, которая отслеживает в очереди наличие элементов с истекшим временем хранения и удаляет их. Эту горутину можно остановить с помощью CancelFunc, которая возвращается при создании кэша.
LRU_Cache_WithTTL_v2 реализует следующий интерфейс:
type ICache interface {
Cap() int
Clear()
Add(key string, value interface{})
AddWithTTL(key string, value interface{}, ttl time.Duration)
Get(key string) (value interface{}, ok bool)
Remove(key string)
}
LRU_Cache_WithTTL_v2 это вторая версия кэша с возможностью добавления элементов с TTL. Отличие от первой версии состоит в том, что здесь нет отслеживающей горутины – проверка и удаление элементов с истекших сроком хранения происходит при обращении к кэшу, а также может явно вызываться с помощью вызова метода UpdateExpirations().