Ответ
LRU (Least Recently Used) Cache — это структура данных, которая хранит ограниченное количество элементов и удаляет наименее используемые при превышении лимита.
Основные принципы:
- Использует хеш-таблицу для быстрого доступа
- Поддерживает порядок использования через двусвязный список
- При переполнении удаляет самый старый элемент
Пример на Go:
type LRUCache struct {
capacity int
cache map[int]*list.Element
list *list.List
}
type entry struct {
key, value int
}
func NewLRUCache(capacity int) *LRUCache {
return &LRUCache{
capacity: capacity,
cache: make(map[int]*list.Element),
list: list.New(),
}
}
func (c *LRUCache) Get(key int) int {
if elem, ok := c.cache[key]; ok {
c.list.MoveToFront(elem)
return elem.Value.(*entry).value
}
return -1
}
func (c *LRUCache) Put(key, value int) {
if elem, ok := c.cache[key]; ok {
elem.Value.(*entry).value = value
c.list.MoveToFront(elem)
return
}
if len(c.cache) >= c.capacity {
oldest := c.list.Back()
delete(c.cache, oldest.Value.(*entry).key)
c.list.Remove(oldest)
}
elem := c.list.PushFront(&entry{key, value})
c.cache[key] = elem
}
Применение: Кеширование, базы данных, веб-серверы.