Junior — Middle
Welche Caching-Methoden bevorzugen Sie in Ihren Projekten und warum?
sobes.tech KI
Antwort von AI
In Go werden für das Caching häufig folgende Ansätze verwendet:
- Integrierte Datenstrukturen mit Synchronisation: z.B.
mapmitsync.RWMutexfür thread-sicheren Zugriff. - Bibliothekspakete von Drittanbietern: z.B.
golang-lrufür die Implementierung eines LRU-Caches, der automatisch die am wenigsten genutzten Elemente entfernt. - sync.Map: eine threadsichere Karte aus der Standardbibliothek, geeignet für Caches mit hoher Konkurrenz.
Die Präferenz hängt von der Aufgabe ab:
- Für einen einfachen Cache mit Zugriffskontrolle —
map+sync.RWMutex. - Für einen Cache mit Größenbegrenzung und automatischer Entfernung — LRU-Cache aus Drittanbieterbibliotheken.
- Für Hochleistungsfälle mit häufigen Lesezugriffen und seltenen Schreibzugriffen —
sync.Map.
Beispiel für einen einfachen Cache mit 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
}
Dieser Ansatz ist einfach und effektiv für die meisten Fälle.