Sobes.tech
Назад к вопросам
Senior
2

Что кешировали? Только справочники?

Компании, где спрашивали
МВидео/эльдорадо

Ответ от нейросети

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
}