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
}
Този подход е прост и ефективен за повечето случаи.