Назад к вопросам
Middle+
2
Какие проблемы с кэшем и как с ними бороться?
Компании, где спрашивали
VK music
Ответ от нейросети
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
}