Зачем ключам в кэше задают TTL?
- Зачем TTL в Redis?
TTL ограничивает время жизни ключа: память освобождается, а расхождение с источником ограничено сверху, даже если инвалидацию пропустили.
- Короткий TTL — свежее, но больше промахов; длинный — наоборот
- Разброс TTL против одновременного истечения
- Без TTL кэш со временем заполняется устаревшими ключами
А ещё При maxmemory вытеснение работает и без TTL, но по своей политике
Подробно
Срок жизни решает сразу две задачи. Первая — ёмкость: без него кэш растёт, пока не упрётся в лимит памяти. Вторая, менее очевидная, — согласованность: точно отследить, какие ключи затронуло изменение данных, обычно трудно, а короткий TTL ограничивает время, в течение которого пользователь может видеть устаревшее значение, вообще без отслеживания зависимостей. Мгновенной согласованности он при этом не даёт, и это нормально: кэш по своей природе допускает отставание.
Что хотят услышать
- Две функции TTL.
- Компромисс длины TTL.
- Разброс против давки.
Частые ошибки
- Класть значения в кэш без срока жизни.
- Ожидать от кэша строгой согласованности с источником.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Чтобы ускорить чтение из кэша
- ✗Чтобы кэш сам подгружал данные из базы
- ✓Чтобы устаревшие данные истекали сами и память не росла бесконечно
- ✗Чтобы кэш в каждый момент был согласован с базой и не отдавал устаревших значений
Что спросят дальше
- Что такое политика вытеснения и зачем она нужна?
- Как работает паттерн cache-aside?
Разбор темы
- Redis и кэширование
Cache-aside и стратегии записи, TTL и eviction, защита от stampede и аккуратные распределённые блокировки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.