Назад к вопросам
Senior
3
Какие стратегии инвалидации кэша бывают в Redis? Какие данные кэшировать, какие нет? L1/L2 кэширование.
Компании, где спрашивали
Uzum
Ответ от нейросети
sobes.tech AI
Стратегии инвалидации кэша в Redis:
- Время жизни (TTL) — установка срока жизни ключа, после которого он автоматически удаляется.
- Явное удаление (Cache Eviction) — при обновлении или удалении данных в источнике кэша удалять соответствующие ключи.
- Write-through — при записи данных сначала обновлять кэш, затем базу.
- Write-back — обновлять кэш, а запись в базу делать асинхронно.
- Cache Aside (Lazy Loading) — при запросе сначала проверять кэш, при промахе загружать из БД и записывать в кэш.
Какие данные кэшировать:
- Часто запрашиваемые, редко изменяющиеся данные (списки, справочники).
- Результаты тяжёлых вычислений.
Какие не стоит кэшировать:
- Часто изменяющиеся данные с высокой динамикой.
- Конфиденциальные данные без дополнительной защиты.
L1/L2 кэширование:
- L1 (Level 1) — локальный кэш в памяти приложения (например, в Go map или библиотеке), быстрый доступ, но ограничен одним экземпляром.
- L2 (Level 2) — распределённый кэш, например Redis, доступен всем инстансам приложения.
Комбинация L1 и L2 позволяет снизить нагрузку на Redis и базу, обеспечивая баланс между скоростью и консистентностью.
Пример использования Cache Aside с Redis в Go:
val, err := redisClient.Get(ctx, key).Result()
if err == redis.Nil {
// Кэш промах — получить из БД
val = getFromDB(key)
// Записать в кэш с TTL
redisClient.Set(ctx, key, val, time.Minute*10)
} else if err != nil {
// Обработка ошибки Redis
}
// Использовать val
Такой подход прост и эффективен для большинства сценариев.