Sobes.tech
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, map con sync.RWMutex para acceso seguro en concurrencia.
  • Paquetes de bibliotecas externas: por ejemplo, golang-lru para 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.