Вопрос с собеседования · Базы данных

Зачем ключам в кэше задают TTL?

JuniorRedis и кэшированиеRedis
Ещё спрашивают так:
  • Зачем TTL в Redis?
Коротко

TTL ограничивает время жизни ключа: память освобождается, а расхождение с источником ограничено сверху, даже если инвалидацию пропустили.

  • Короткий TTL — свежее, но больше промахов; длинный — наоборот
  • Разброс TTL против одновременного истечения
  • Без TTL кэш со временем заполняется устаревшими ключами

А ещё При maxmemory вытеснение работает и без TTL, но по своей политике

Подробно

Срок жизни решает сразу две задачи. Первая — ёмкость: без него кэш растёт, пока не упрётся в лимит памяти. Вторая, менее очевидная, — согласованность: точно отследить, какие ключи затронуло изменение данных, обычно трудно, а короткий TTL ограничивает время, в течение которого пользователь может видеть устаревшее значение, вообще без отслеживания зависимостей. Мгновенной согласованности он при этом не даёт, и это нормально: кэш по своей природе допускает отставание.

Что хотят услышать

  • Две функции TTL.
  • Компромисс длины TTL.
  • Разброс против давки.

Частые ошибки

  • Класть значения в кэш без срока жизни.
  • Ожидать от кэша строгой согласованности с источником.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Чтобы ускорить чтение из кэша
  • ✗Чтобы кэш сам подгружал данные из базы
  • ✓Чтобы устаревшие данные истекали сами и память не росла бесконечно
  • ✗Чтобы кэш в каждый момент был согласован с базой и не отдавал устаревших значений

Что спросят дальше

  • Что такое политика вытеснения и зачем она нужна?
  • Как работает паттерн cache-aside?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования