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
}