Senior
Ի՞նչ է կեշավորված: Միայն ցուցակները՞
sobes.tech AI
Պատասխան AI-ից
Կեշավորումը կիրառվում էր ոչ միայն დირექტորիաների վրա, այլ նաև հաճախ պահանջվող և հազվադեպ փոփոխվող այլ տվյալների տեսակների վրա։ Օրինակ՝
- Կոմպլեքս հաշվարկների կամ ամփոփումների արդյունքներ, որպեսզի դրանք չվերահաշվարկվեն յուրաքանչյուր հարցում:
- Արտաքին API-ներից ստացված պատասխաններ, որպեսզի նվազեցվի բեռը և կրճատվի ուշացումը:
- Օգտագործողի սեսիաներ և հաստատման նշաններ արագ մուտքի համար:
Go-ում սովորաբար օգտագործում եմ ներքին տվյալների կառուցվածքներ, օրինակ՝ mutex-ով պաշտպանված քարտեզ կամ երրորդ կողմի cache գրադարաններ (օրինակ՝ groupcache, ristretto), որոնք ապահովում են TTL, ավտոմատ հնացած տվյալների հեռացում և արդյունավետ հիշողության կառավարում:
Պարզ TTL cache-ի օրինակ՝
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
}