Senior
Nima kesh qilindi? Faqat kataloglarmi?
sobes.tech AI
AIdan javob
Kesh qilish faqat kataloglarga emas, balki tez-tez so'raladigan va kam o'zgaradigan boshqa ma'lumot turlariga ham qo'llaniladi. Masalan:
- Murakkab hisoblashlar yoki agregatsiya natijalari, har bir so'rovda qayta hisoblamaslik uchun.
- Tashqi API-lardan javoblar, yuklamani kamaytirish va kechikishni qisqartirish uchun.
- Foydalanuvchi sessiyalari va autentifikatsiya tokenlari, tezkor kirish uchun.
Go tilida odatda, xavfsizlik uchun mutex bilan map yoki uchinchi tomon caching kutubxonalarini (masalan, groupcache, ristretto) ishlataman, ular TTL, eskirgan ma'lumotlarni avtomatik o'chirish va samarali xotira boshqaruvini ta'minlaydi.
Oddiy TTL bilan cache misoli:
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
}