Sobes.tech
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
}