Практическое задание

Эта задача — шаг 5 курса «Redis в проде»

Кэш, который не отказывает в записи

средне~7 мин

Этот Redis — кэш: потерять старые ключи не страшно, а вот ошибка OOM command not allowed для приложения — авария.

Настрой его:

  • лимит памяти 20 МБ (20mb);
  • политика вытеснения allkeys-lru — при заполнении удалять давно не использованные ключи.

Настройки должны действовать сейчас, без рестарта, и сохраниться в /etc/redis/redis.conf.

Конфиг /etc/redis/redis.conf открой во вкладке «Редактор».

Что потренируешь:
  • redis
  • maxmemory
  • maxmemory-policy
  • allkeys-lru
  • вытеснение
  • CONFIG REWRITE

Разбор темы

Когда Redis упирается в maxmemory, он поступает по maxmemory-policy. По умолчанию это noeviction: чтение работает, а любая запись получает ошибку OOM — правильно для хранилища, где данные терять нельзя, и губительно для кэша. Политики allkeys-lru/allkeys-lfu вытесняют давно или редко используемые ключи из всего датасета, volatile-* — только ключи с TTL, allkeys-random — случайные. LRU в Redis приближённый: он сэмплирует maxmemory-samples ключей и выбрасывает лучшего кандидата. Без явного maxmemory кэш растёт до лимита контейнера или ОС, и его убивает OOM killer — поэтому лимит задают всегда и закрепляют в конфиге, иначе рестарт молча вернёт старое поведение.

Что проверяется

  1. лимит 20 МБ действует
  2. политика allkeys-lru действует
  3. настройки сохранены в redis.conf
  4. запись сверх лимита проходит без OOM

Как это выглядит