Junior — Middle
Quais métodos de cache você prefere usar em seus projetos e por quê?
sobes.tech IA
Resposta da IA
Em Go, costuma-se usar as seguintes abordagens para cache:
- Estruturas de dados integradas com sincronização: por exemplo,
mapcomsync.RWMutexpara acesso seguro em concorrência. - Pacotes de bibliotecas externas: por exemplo,
golang-lrupara implementar um cache LRU que remove automaticamente os elementos menos utilizados. - sync.Map: um mapa seguro para concorrência da biblioteca padrão, útil para caches com alta concorrência.
A preferência depende da tarefa:
- Para um cache simples com controle de acesso —
map+sync.RWMutex. - Para um cache com limite de tamanho e remoção automática — cache LRU de bibliotecas externas.
- Para casos de alto desempenho com leituras frequentes e escritas raras —
sync.Map.
Exemplo de um cache simples com sync.RWMutex:
type Cache struct {
mu sync.RWMutex
data map[string]interface{}
}
func (c *Cache) Get(key string) (interface{}, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
val, ok := c.data[key]
return val, ok
}
func (c *Cache) Set(key string, value interface{}) {
c.mu.Lock()
defer c.mu.Unlock()
c.data[key] = value
}
Este método é simples e eficaz para a maioria dos casos.