Junior — Middle
Koje metode keširanja preferirate da koristite u svojim projektima i zašto?
sobes.tech АИ
Одговор од АИ
U Go-u se često koriste sledeći pristupi za keširanje:
- Ugrađene strukture podataka sa sinhronizacijom: na primer,
mapsasync.RWMutexza sigurni pristup u višestrukim nitima. - Paketi biblioteka trećih strana: na primer,
golang-lruza implementaciju LRU keš memorije koja automatski uklanja najmanje korišćene elemente. - sync.Map: sigurna mapa iz standardne biblioteke, pogodna za kešove sa visokim konkurencijom.
Preferencija zavisi od zadatka:
- Za jednostavan keš sa kontrolom pristupa —
map+sync.RWMutex. - Za keš sa ograničenjem veličine i automatskim uklanjanjem — LRU keš iz biblioteka trećih strana.
- Za visokoperformantne slučajeve sa čestim čitanjima i retkim zapisima —
sync.Map.
Primer jednostavnog keša sa 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
}
Ovaj pristup je jednostavan i efikasan za većinu slučajeva.