Senior
Чӣ кэш карда шуд? Тек феҳристҳо?
sobes.tech AI
Ҷавоб аз AI
Захира кардани мӯҳр танҳо ба каталогҳо татбиқ намешавад, балки ба намудҳои дигар маълумот, ки зуд дархост мешаванд ва камтар тағйир меёбанд, низ татбиқ мешавад. Масалан:
- Натиҷаҳои ҳисобҳои мураккаб ё ҷамъбастҳо, то ки дар ҳар дархост дубора ҳисоб накунанд.
- Ҷавобҳо аз APIҳои хориҷӣ, то борро кам кунад ва таъхирҳоро коҳиш диҳад.
- Сессияҳои корбар ва токенҳои тасдиқ барои дастрасии зуд.
Дар Go, одатан, ман структураҳои додаҳои дарунсохтро истифода мебарам, масалан, харита бо mutex барои бехатарии сӯзишворӣ, ё китобхонаҳои кеши сторонӣ (масалан, groupcache, ristretto), ки TTL, тоза кардани автоматии маълумоти кӯҳна ва идоракунии самараноки хотираро таъмин мекунанд.
Масали кеши оддӣ бо TTL:
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
}