Sobes.tech
Junior — Middle

Кои методи за кеширане предпочитате да използвате във вашите проекти и защо?

sobes.tech AI

Отговор от AI

В Go често използваните подходи за кеширане включват:

  • Вградени структури от данни със синхронизация: например, map с sync.RWMutex за безопасен за нишки достъп.
  • Библиотеки на трети страни: например, golang-lru за реализиране на LRU кеш, който автоматично премахва най-малко използваните елементи.
  • sync.Map: нишково безопасна карта от стандартната библиотека, подходяща за кешове с висока конкуренция.

Предпочитанията зависят от задачата:

  • За прост кеш с контрол на достъпа — map + sync.RWMutex.
  • За кеш с ограничение на размера и автоматично премахване — LRU кеш от външни библиотеки.
  • За високопроизводителни случаи с чести четения и редки записи — sync.Map.

Пример за прост кеш с 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
}

Този подход е прост и ефективен за повечето случаи.