Back to questions
Senior
1
Что кешировали? Только справочники?
Companies where asked
МВидео/эльдорадо
Answer from AI
sobes.tech AI
Кеширование применял не только к справочникам, но и к другим типам данных, которые часто запрашиваются и редко меняются. Например:
- Результаты сложных вычислений или агрегаций, чтобы не пересчитывать при каждом запросе.
- Ответы от внешних API, чтобы снизить нагрузку и уменьшить задержки.
- Сессии пользователей и токены аутентификации для быстрого доступа.
В Go обычно использую встроенные структуры данных, например, map с mutex для потокобезопасности, либо сторонние библиотеки кеширования (например, groupcache, ristretto), которые обеспечивают TTL, автоматическое удаление устаревших данных и эффективное управление памятью.
Пример простого кеша с TTL:
import (
"sync"
"time"
)
type CacheItem struct {
Value interface{}
Expiration int64
}
type Cache struct {
items map[string]CacheItem
mu sync.RWMutex
}
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
}