lru: cache value instead of pointer

This commit is contained in:
2024-02-03 17:37:02 +03:00
parent 991e24c1a4
commit a1e778afe3

View File

@ -12,7 +12,7 @@ type LRU[T any] struct {
} }
type item[T any] struct { type item[T any] struct {
key string key string
value *T value T
eol time.Time eol time.Time
} }
@ -30,7 +30,7 @@ func (lru *LRU[T]) Set(key string, value T, ttl time.Duration) (evicted bool) {
if element, ok := lru.items[key]; ok { if element, ok := lru.items[key]; ok {
lru.queue.MoveToFront(element) lru.queue.MoveToFront(element)
item := element.Value.(*item[T]) item := element.Value.(*item[T])
item.value = &value item.value = value
item.eol = eol item.eol = eol
return return
@ -43,7 +43,7 @@ func (lru *LRU[T]) Set(key string, value T, ttl time.Duration) (evicted bool) {
item := &item[T]{ item := &item[T]{
key: key, key: key,
value: &value, value: value,
eol: eol, eol: eol,
} }
@ -68,7 +68,7 @@ func (lru *LRU[T]) Get(name string) (value T, ok bool) {
lru.queue.MoveToFront(element) lru.queue.MoveToFront(element)
return *item.value, true return item.value, true
} }
func (lru *LRU[T]) evict() { func (lru *LRU[T]) evict() {