> Какие данные кэшируются и как работает кэширование (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
В Go кэширование обычно применяется для данных, которые дорого вычислять или часто запрашивать, но редко изменять. Типичные примеры: результаты SQL-запросов, ответы внешних API, сессии пользователей, конфигурации, HTML-фрагменты.
Как работает кэширование в Go:
- In-memory кэш - самый быстрый, реализуется через
sync.Mapили библиотеки типаgo-cache(с TTL). Данные хранятся в памяти процесса, доступны мгновенно, но теряются при перезапуске. - Распределённый кэш - Redis или Memcached. Используется для масштабирования: несколько инстансов Go-приложения обращаются к общему хранилищу. Ключи - строки, значения - сериализованные данные (JSON, protobuf).
- HTTP-кэширование - заголовки
Cache-Control,ETag,Last-Modified. Go-сервер может отдавать 304 Not Modified, если данные не изменились. Реализуется через middleware или библиотеки типаgin-contrib/cache. - Кэш на уровне БД - query cache в PostgreSQL (устарел) или материализованные представления.
Пример in-memory кэша в Go:
GOimport ("sync""time")type Cache struct {mu sync.RWMutexitems 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, чтобы избежать утечки памяти.
> Похожие задачи по Go
Какие требования по шифрованию данных существуют
Как подбирать тайм-ауты для backend взаимодействия, например HTTP запросов
Что происходит с персональными данными при обработке
Что происходит если памяти не хватает
> Похожие задачи по backend
Какие требования по шифрованию данных существуют
Как подбирать тайм-ауты для backend взаимодействия, например HTTP запросов
Что происходит с персональными данными при обработке
Что происходит если памяти не хватает
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью