Sobes.tech
Junior — Middle

Quels méthodes de mise en cache préférez-vous utiliser dans vos projets et pourquoi?

sobes.tech IA

Réponse de l'IA

En Go, on utilise souvent les approches suivantes pour la mise en cache :

  • Structures de données intégrées avec synchronisation : par exemple, map avec sync.RWMutex pour un accès sécurisé en cas de concurrence.
  • Packages de bibliothèques tierces : par exemple, golang-lru pour implémenter un cache LRU qui supprime automatiquement les éléments les moins utilisés.
  • sync.Map : une carte sécurisée pour la concurrence de la bibliothèque standard, pratique pour les caches à haute contention.

La préférence dépend de la tâche :

  • Pour un cache simple avec contrôle d'accès — map + sync.RWMutex.
  • Pour un cache avec limite de taille et suppression automatique — cache LRU de bibliothèques tierces.
  • Pour des cas à haute performance avec des lectures fréquentes et des écritures rares — sync.Map.

Exemple d'un cache simple avec 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
}

Cette approche est simple et efficace pour la plupart des cas.