Sobes.tech
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. map mit sync.RWMutex für thread-sicheren Zugriff.
  • Bibliothekspakete von Drittanbietern: z.B. golang-lru fü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.