Вопрос проверяет понимание механизмов персистентности данных в Redis, что важно для обеспечения надежности и восстановления данных.
Redis, будучи in-memory хранилищем, хранит все данные в оперативной памяти, что обеспечивает высокую скорость работы. Однако для долговременного хранения и восстановления после сбоев необходимы механизмы персистентности. Redis предоставляет два основных подхода: RDB (Redis Database) и AOF (Append Only File).
RDB создает бинарные дампы данных в заданные интервалы времени. Это похоже на фотографию состояния базы данных в определенный момент. Настройка производится через параметры save в конфигурации, например:
save 900 1 # сохранять, если хотя бы 1 ключ изменился за 900 секунд
save 300 10 # сохранять, если 10 ключей изменились за 300 секунд
save 60 10000 # сохранять, если 10000 ключей изменились за 60 секундПреимущества RDB: компактный файл, быстрая загрузка при старте, подходит для бэкапов. Недостатки: возможна потеря данных за последний интервал между снапшотами.
AOF записывает каждую команду, изменяющую данные, в журнал. Это обеспечивает более высокую надежность, так как можно восстановить состояние до последней команды. Настройка синхронизации:
appendfsync always # синхронизация после каждой команды (максимальная надежность)
appendfsync everysec # синхронизация раз в секунду (баланс)
appendfsync no # синхронизация по усмотрению ОСПреимущества AOF: минимальная потеря данных, легко читается человеком. Недостатки: файл может быть большим, загрузка медленнее, чем RDB.
Рекомендуется использовать оба механизма одновременно. Redis может перезаписывать AOF (rewrite) для уменьшения размера. В современных версиях Redis по умолчанию включен только AOF, но можно активировать RDB для бэкапов.
Вывод: выбор между RDB и AOF зависит от требований к надежности и производительности. Для критичных систем используйте AOF с appendfsync everysec, для бэкапов — RDB. Комбинация обоих методов обеспечивает оптимальный баланс.