Ответ
Персистентность в 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 для максимальной сохранности данных в случае сбоя.