Sobes.tech
Back to questions
Middle+
1

Какие проблемы с кэшем и как с ними бороться?

Companies where asked
VK music

Answer from AI

sobes.tech AI

Проблемы с кэшем часто связаны с устаревшими данными, гонками при обновлении и избыточным потреблением памяти. Чтобы бороться с этими проблемами, используют:

  • Инвалидацию кэша: своевременное удаление или обновление устаревших данных.
  • TTL (time-to-live): установка времени жизни для кэшированных объектов.
  • Синхронизацию доступа: использование мьютексов или атомарных операций для предотвращения гонок.
  • Лимитирование размера кэша: чтобы избежать переполнения памяти.

Пример простого кэша с TTL на Go:

import (
    "sync"
    "time"
)

type cacheItem struct {
    value      interface{}
    expiration int64
}

type Cache struct {
    items map[string]cacheItem
    mu    sync.RWMutex
}

func NewCache() *Cache {
    return &Cache{
        items: make(map[string]cacheItem),
    }
}

func (c *Cache) Set(key string, value interface{}, duration time.Duration) {
    c.mu.Lock()
    defer c.mu.Unlock()
    c.items[key] = cacheItem{
        value:      value,
        expiration: time.Now().Add(duration).UnixNano(),
    }
}

func (c *Cache) Get(key string) (interface{}, bool) {
    c.mu.RLock()
    defer c.mu.RUnlock()
    item, found := c.items[key]
    if !found || time.Now().UnixNano() > item.expiration {
        return nil, false
    }
    return item.value, true
}