Почему инвалидацию кэша считают одной из самых сложных задач и что помогает на практике?
- Как инвалидировать кэш?
- Почему кэш показывает старые данные?
Сложно из-за зависимостей: кэшированное значение собрано из нескольких сущностей, и отследить все ключи, затронутые изменением строки, трудно.
- Короткий TTL ограничивает расхождение без всякого отслеживания
- Версия в ключе: новые данные — новый ключ, старые вытесняются сами
- Инвалидация по событиям изменений (CDC), удаление вместо перезаписи
А ещё Разделять данные по требуемой свежести
Подробно
Кэшированное значение обычно является производным от нескольких сущностей — витрина товара включает цену, остаток и отзывы, — и отследить все ключи, зависящие от изменённой строки, тяжело; со временем такая карта зависимостей расходится с реальностью. Работающие приёмы: короткий TTL, который ограничивает время расхождения без всякого отслеживания и подходит для большинства случаев; версия в составе ключа, когда новая версия данных порождает новый ключ, а старые вытесняются сами; инвалидация по событию изменения, если она действительно нужна. Полезно помнить и о том, что удаление ключа под нагрузкой провоцирует лавину запросов к источнику, поэтому массовую инвалидацию сочетают с защитой от неё.
Что хотят услышать
- Причина сложности — производные значения и карта зависимостей.
- Практические приёмы: TTL, версии в ключах, события.
- Удаление ключа вместо перезаписи.
Частые ошибки
- Строить сложную схему точечной инвалидации там, где хватило бы короткого TTL.
- Массово сбрасывать кэш под нагрузкой без защиты от лавины.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Трудно понять, какие ключи затронуло изменение; помогают TTL, версии ключей, инвалидация по событию
- ✗Инвалидация требует остановки приложения
- ✗Кэши не поддерживают точечное удаление записей, поэтому при любом изменении кэш приходится сбрасывать целиком
- ✗Достаточно увеличить объём памяти кэша
Что спросят дальше
- Как версионирование ключа избавляет от явного удаления?
- Чем защищаются от лавины запросов после инвалидации?
Разбор темы
- Кэширование и CDN
Кэш как размен согласованности на задержку, hit rate и слои, стратегии чтения и записи, инвалидация и гонка с записью, stampede и лавина, вытеснение и горячие ключи, CDN и ключ кэша.
Связанные вопросы
- После обновления строки приложение записывает новое значение в кэш. Изредка в кэше навсегда остаётся устаревшее значение. Что происходит и как правильно? Senior
- Каталог товаров: 95% запросов — чтение, описания меняются редко, но изменение цены должно быть видно пользователям в течение минуты. Как вы спроектируете кэширование? Middle
- Как оценить, насколько кэш разгружает базу, и что будет, если он упадёт? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.