Sobes.tech
Senior

O que foi em cache? Apenas os dicionários?

sobes.tech IA

Resposta da IA

O cache era aplicado não só aos diretórios, mas também a outros tipos de dados frequentemente solicitados e raramente alterados. Por exemplo:

  • Resultados de cálculos complexos ou agregações, para evitar recalcular a cada solicitação.
  • Respostas de APIs externas, para reduzir a carga e diminuir a latência.
  • Sessões de utilizador e tokens de autenticação para acesso rápido.

Em Go, geralmente uso estruturas de dados integradas, por exemplo, um mapa com mutex para segurança em múltiplas threads, ou bibliotecas de cache de terceiros (como groupcache, ristretto), que oferecem TTL, remoção automática de dados desatualizados e gestão eficiente de memória.

Exemplo de um cache simples com 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
}