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,
mapavecsync.RWMutexpour un accès sécurisé en cas de concurrence. - Packages de bibliothèques tierces : par exemple,
golang-lrupour 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.