Junior — Middle
Kunt u het principe van de werking van de LRU-cache uitleggen en in welke situaties deze wordt toegepast?
sobes.tech AI
Antwoord van AI
LRU (Least Recently Used) cache is een gegevensstructuur die een beperkt aantal elementen opslaat en het oudste niet-gebruikte element verwijdert wanneer deze vol is.
Werking:
- Wanneer een element wordt benaderd, wordt het het "meest recent".
- Als de cache vol is en een nieuw element moet worden toegevoegd, wordt het oudste niet-gebruikte element verwijderd.
Dit maakt efficiënt gebruik van het geheugen mogelijk door de meest relevante gegevens te behouden.
Toepassingen:
- Caching van databasequery-resultaten.
- Caching van afbeeldingen of bestanden in het geheugen.
- In systemen met beperkte bronnen om de toegang tot gegevens te optimaliseren.
Voorbeeld in Go (vereenvoudigd):
// Gebruik van de container/list om de gebruiksvolgorde bij te houden
import (
"container/list"
)
type LRUCache struct {
capacity int
cache map[int]*list.Element
list *list.List
}
type entry struct {
key int
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, bool) {
if elem, ok := c.cache[key]; ok {
c.list.MoveToFront(elem)
return elem.Value.(*entry).value, true
}
return 0, false
}
func (c *LRUCache) Put(key, value int) {
if elem, ok := c.cache[key]; ok {
c.list.MoveToFront(elem)
elem.Value.(*entry).value = value
return
}
if c.list.Len() == c.capacity {
back := c.list.Back()
if back != nil {
c.list.Remove(back)
delete(c.cache, back.Value.(*entry).key)
}
}
elem := c.list.PushFront(&entry{key, value})
c.cache[key] = elem
}