> Какие данные кэшируются и как работает кэширование (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

В Go кэширование обычно применяется для данных, которые дорого вычислять или часто запрашивать, но редко изменять. Типичные примеры: результаты SQL-запросов, ответы внешних API, сессии пользователей, конфигурации, HTML-фрагменты.

Как работает кэширование в Go:

  1. In-memory кэш - самый быстрый, реализуется через sync.Map или библиотеки типа go-cache (с TTL). Данные хранятся в памяти процесса, доступны мгновенно, но теряются при перезапуске.
  2. Распределённый кэш - Redis или Memcached. Используется для масштабирования: несколько инстансов Go-приложения обращаются к общему хранилищу. Ключи - строки, значения - сериализованные данные (JSON, protobuf).
  3. HTTP-кэширование - заголовки Cache-Control, ETag, Last-Modified. Go-сервер может отдавать 304 Not Modified, если данные не изменились. Реализуется через middleware или библиотеки типа gin-contrib/cache.
  4. Кэш на уровне БД - query cache в PostgreSQL (устарел) или материализованные представления.

Пример in-memory кэша в Go:

GO
import (
"sync"
"time"
)
type Cache struct {
mu sync.RWMutex
items map[string]item
}
type item struct {
value interface{}
expiresAt time.Time
}
func (c *Cache) Get(key string) (interface{}, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
it, ok := c.items[key]
if !ok || time.Now().After(it.expiresAt) {
return nil, false
}
return it.value, true
}
func (c *Cache) Set(key string, value interface{}, ttl time.Duration) {
c.mu.Lock()
defer c.mu.Unlock()
c.items[key] = item{value: value, expiresAt: time.Now().Add(ttl)}
}

Стратегии инвалидации:

  • TTL (время жизни) - автоматически удаляет устаревшие данные.
  • Event-driven - сброс кэша при изменении данных (например, через каналы или брокеры сообщений).
  • Write-through - запись одновременно в БД и кэш.

Важно: не кэшируйте чувствительные данные (пароли, токены) без шифрования, и всегда устанавливайте TTL, чтобы избежать утечки памяти.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью