Перейти к содержанию

Практикум: проверка состояния Redis не ограничивается PING

Нужен работающий Docker. Скрипт создаёт три контейнера redis:7-alpine: исправный основной узел, основной узел с лимитом памяти ниже текущего потребления и политикой noeviction, а также реплику только для чтения. Затем исправный основной узел приостанавливается и возобновляет работу.

Команда выполняется из каталога docs/blog/lab/2026-09-07-redis-health-checks в клоне репозитория. Практикум использует функции статьи и учебные реализации из соседнего каталога 2026-09-07-when-should-redis-fail-open, поэтому нужны оба каталога:

uv run --no-project --python 3.13 --with-requirements requirements.txt health_lab.py

Закреплены версии redis-client-kit 0.3.0, redis-py 8.1.0 и testcontainers 4.15.0. Скрипт выводит версию Redis (7.4.11 в проверенном запуске).

На реплике и узле с исчерпанным лимитом памяти проверяется успешный PING при отказе записи. Проверка библиотеки с write_key выполняет PING, затем SET с TTL 60 секунд; обратного чтения в ней нет. Практикум отдельно проверяет записанное значение и его TTL.

Функции магазина должны вернуть цену из источника даже при отказе заполнения кеша, отклонить вход и оплату и не выполнить списание при отказе записи. После снятия лимита памяти и возобновления Redis состояние должно восстановиться с прежними клиентами. Результаты проверяются утверждениями; успешный запуск завершается строкой PASS: Redis health scenarios.

Исходный код практикума на GitHub.