Junior — Middle
Welke caching-methoden gebruik je het liefst in je projecten en waarom?
sobes.tech AI
Antwoord van AI
In Go worden de volgende benaderingen vaak gebruikt voor caching:
- Ingebouwde datastructuren met synchronisatie: bijvoorbeeld
mapmetsync.RWMutexvoor veilige gelijktijdige toegang. - Derde partij bibliotheekpakketten: bijvoorbeeld
golang-lruvoor het implementeren van een LRU-cache die automatisch de minst gebruikte items verwijdert. - sync.Map: een gelijktijdige veilige kaart uit de standaardbibliotheek, handig voor caches met hoge competitie.
De voorkeur hangt af van de taak:
- Voor een eenvoudige cache met toegangscontrole —
map+sync.RWMutex. - Voor een cache met limiet op grootte en automatische verwijdering — LRU-cache van externe bibliotheken.
- Voor hoge prestaties met frequente lezingen en zeldzame schrijvingen —
sync.Map.
Voorbeeld van een eenvoudige cache met sync.RWMutex:
type Cache struct {
mu sync.RWMutex
data map[string]interface{}
}
func (c *Cache) Get(key string) (interface{}, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
val, ok := c.data[key]
return val, ok
}
func (c *Cache) Set(key string, value interface{}) {
c.mu.Lock()
defer c.mu.Unlock()
c.data[key] = value
}
Deze aanpak is eenvoudig en effectief voor de meeste gevallen.