Junior — Middle
¿Qué métodos de caché prefieres usar en tus proyectos y por qué?
sobes.tech AI
Respuesta de la IA
En Go, se suelen utilizar los siguientes enfoques para el almacenamiento en caché:
- Estructuras de datos integradas con sincronización: por ejemplo,
mapconsync.RWMutexpara acceso seguro en concurrencia. - Paquetes de bibliotecas externas: por ejemplo,
golang-lrupara implementar una caché LRU que elimina automáticamente los elementos menos utilizados. - sync.Map: un mapa seguro para concurrencia de la biblioteca estándar, útil para cachés con alta competencia.
La preferencia depende de la tarea:
- Para una caché simple con control de acceso —
map+sync.RWMutex. - Para una caché con límite de tamaño y eliminación automática — caché LRU de bibliotecas externas.
- Para casos de alto rendimiento con lecturas frecuentes y escrituras raras —
sync.Map.
Ejemplo de una caché simple con 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 enfoque es simple y efectivo para la mayoría de los casos.