Sobes.tech
Senior

Mit cache-eltél? Csak útmutatókat?

sobes.tech MI

Válasz az MI-től

A gyorsítótár nemcsak a könyvtárakra, hanem más gyakran kért és ritkán változó adatok típusaira is alkalmazható volt. Például:

  • Bonyolult számítások vagy aggregációk eredményei, hogy ne kelljen minden kérésnél újra számolni.
  • Külső API-k válaszai, hogy csökkentsük a terhelést és csökkentsük a késleltetést.
  • Felhasználói munkamenetek és hitelesítési tokenek gyors hozzáféréshez.

Go-ban általában beépített adatstruktúrákat használok, például mutex-szel ellátott térképet a szálbiztonság érdekében, vagy harmadik fél cache könyvtárakat (például groupcache, ristretto), amelyek TTL-t, automatikus elavult adatok törlését és hatékony memória kezelést biztosítanak.

Egyszerű TTL cache példája:

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
}