Sobes.tech
Junior — Middle

Milyen cache-elési módszereket részesítesz előnyben a projektjeidben és miért?

sobes.tech MI

Válasz az MI-től

Go-ban gyakran használnak a gyorsítótárazáshoz a következő megközelítéseket:

  • Beépített adatszerkezetek szinkronizációval: például map sync.RWMutex használatával a szálbiztos hozzáféréshez.
  • Harmadik fél könyvtárcsomagjai: például golang-lru az LRU gyorsítótár megvalósításához, amely automatikusan eltávolítja a legkevésbé használt elemeket.
  • sync.Map: a standard könyvtárból származó szálbiztos térkép, amely magas konkurenciára alkalmas.

A választás a feladattól függ:

  • Egyszerű gyorsítótárhoz, hozzáférés-ellenőrzéssel — map + sync.RWMutex.
  • Méretkorlátozott és automatikusan törlő gyorsítótárhoz — külső könyvtárak LRU gyorsítótára.
  • Magas teljesítményű esetekhez, ahol gyakori az olvasás és ritka az írás — sync.Map.

Egyszerű sync.RWMutex példája:

 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
}

Ez a megközelítés egyszerű és hatékony a legtöbb esetben.