Sobes.tech
Junior — Middle

Koje metode keširanja preferirate da koristite u svojim projektima i zašto?

sobes.tech АИ

Одговор од АИ

U Go-u se često koriste sledeći pristupi za keširanje:

  • Ugrađene strukture podataka sa sinhronizacijom: na primer, map sa sync.RWMutex za sigurni pristup u višestrukim nitima.
  • Paketi biblioteka trećih strana: na primer, golang-lru za implementaciju LRU keš memorije koja automatski uklanja najmanje korišćene elemente.
  • sync.Map: sigurna mapa iz standardne biblioteke, pogodna za kešove sa visokim konkurencijom.

Preferencija zavisi od zadatka:

  • Za jednostavan keš sa kontrolom pristupa — map + sync.RWMutex.
  • Za keš sa ograničenjem veličine i automatskim uklanjanjem — LRU keš iz biblioteka trećih strana.
  • Za visokoperformantne slučajeve sa čestim čitanjima i retkim zapisima — sync.Map.

Primer jednostavnog keša sa 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
}

Ovaj pristup je jednostavan i efikasan za većinu slučajeva.