Junior — Middle
Aké metódy kešovania preferujete používať vo svojich projektoch a prečo?
sobes.tech AI
Odpoveď od AI
V Go sa často používajú nasledujúce prístupy k cache:
- Vstavané dátové štruktúry so synchronizáciou: napríklad
mapssync.RWMutexpre bezpečný prístup v prostredí s viacerými vláknami. - Knižničné balíky tretích strán: napríklad
golang-lruna implementáciu LRU cache, ktorá automaticky odstraňuje najmenej používané prvky. - sync.Map: bezpečná mapa z knižnice štandardu, vhodná pre cache s vysokou konkurenciou.
Preferencia závisí od úlohy:
- Pre jednoduchú cache s kontrolou prístupu —
map+sync.RWMutex. - Pre cache s obmedzením veľkosti a automatickým odstraňovaním — LRU cache z externých knižníc.
- Pre vysokovýkonné prípady s častým čítaním a zriedkavým zápisom —
sync.Map.
Príklad jednoduchého cache s 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
}
Tento prístup je jednoduchý a efektívny vo väčšine prípadov.