Что такое персистентность в Redis и какие механизмы она предоставляет?

Ответ

Персистентность в Redis — это механизм сохранения данных из оперативной памяти на постоянное хранилище (диск), что позволяет восстановить данные после перезапуска сервера Redis.

Redis, будучи in-memory базой данных, предлагает два основных механизма персистентности:

1. RDB (Redis Database)

Это механизм создания "снимков" (snapshots) всей базы данных в определенные моменты времени. Данные сохраняются в бинарный, компактный файл dump.rdb.

  • Как работает: Redis создает дочерний процесс, который записывает текущее состояние данных на диск, не блокируя при этом родительский процесс для обработки запросов.
  • Плюсы:
    • Компактный файл, идеально подходит для бэкапов.
    • Быстрое восстановление, так как загружается один файл.
  • Минусы:
    • Возможна потеря данных между снимками. Если Redis упадет, все изменения с момента последнего снимка будут утеряны.

Пример конфигурации (redis.conf):

# Сохранить, если за 900 сек было хотя бы 1 изменение
save 900 1
# Сохранить, если за 300 сек было хотя бы 10 изменений
save 300 10

2. AOF (Append Only File)

Это механизм логирования каждой операции записи, которая изменяет данные в Redis. Все команды записываются в файл appendonly.aof.

  • Как работает: При перезапуске Redis последовательно выполняет все команды из AOF-файла, восстанавливая состояние данных.
  • Плюсы:
    • Более высокая надежность. При настройке по умолчанию (fsync каждую секунду) максимальная потеря данных — 1 секунда.
    • Лог легко читаем и может быть отредактирован вручную.
  • Минусы:
    • AOF-файл обычно больше, чем RDB-файл.
    • Восстановление может быть медленнее, чем из RDB, так как нужно выполнить все команды.

Комбинированный подход

Часто используют оба механизма одновременно: RDB для создания периодических бэкапов и быстрого восстановления, а AOF для максимальной сохранности данных в случае сбоя.