Senior
Ko kešēja? Tik katalogus?
sobes.tech AI
Atbilde no AI
Kešatmiņa tika piemērota ne tikai direktoriju katalogiem, bet arī citiem bieži pieprasītiem un reti mainīgiem datu tipiem. Piemēram:
- Sarežģītu aprēķinu vai agregāciju rezultāti, lai katrā pieprasījumā tos atkārtoti neaprēķinātu.
- Ārējo API atbildes, lai samazinātu slodzi un samazinātu aizkavi.
- Lietotāju sesijas un autentifikācijas žetoni ātrai piekļuvei.
Go parasti izmanto iebūvētās datu struktūras, piemēram, mutex ar karti, lai nodrošinātu drošību daudzšūnu vidē, vai trešo pušu kešatmiņas bibliotēkas (piemēram, groupcache, ristretto), kas nodrošina TTL, automātisku novecojušo datu dzēšanu un efektīvu atmiņas pārvaldību.
Vienkāršs TTL kešatmiņas piemērs:
import (
"sync"
"time"
)
type CacheItem struct {
Value interface{}
Expiration int64
}
type Cache struct {
items map[string]CacheItem
mu sync.RWMutex
}
func (c *Cache) Set(key string, value interface{}, duration time.Duration) {
c.mu.Lock()
defer c.mu.Unlock()
c.items[key] = CacheItem{
Value: value,
Expiration: time.Now().Add(duration).UnixNano(),
}
}
func (c *Cache) Get(key string) (interface{}, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
item, found := c.items[key]
if !found || time.Now().UnixNano() > item.Expiration {
return nil, false
}
return item.Value, true
}