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
}