Sobes.tech
Junior — Middle

Ce metode de caching preferați să folosiți în proiectele dvs. și de ce?

sobes.tech AI

Răspuns de la AI

În Go, se folosesc adesea următoarele abordări pentru caching:

  • Structuri de date integrate cu sincronizare: de exemplu, map cu sync.RWMutex pentru acces sigur în medii concurente.
  • Pachete de biblioteci externe: de exemplu, golang-lru pentru implementarea unui cache LRU care elimină automat cele mai puțin utilizate elemente.
  • sync.Map: o hartă sigură pentru concurență din biblioteca standard, utilă pentru cache-uri cu concurență ridicată.

Preferința depinde de sarcină:

  • Pentru un cache simplu cu control de acces — map + sync.RWMutex.
  • Pentru cache cu limitare de dimensiune și eliminare automată — cache LRU din biblioteci externe.
  • Pentru cazuri de înaltă performanță cu citiri frecvente și scrieri rare — sync.Map.

Exemplu de cache simplu cu 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
}

Această abordare este simplă și eficientă pentru majoritatea cazurilor.