На сайте redis.io говорится, что RDB менее надежен, чем AOF. Означает ли это, что существует некоторая вероятность повреждения базы данных и полной потери данных при отключении питания во время операции сохранения?
Сам файл .rdb «не может» быть поврежден, поскольку дамп сначала сохраняется в файл tmp, а затем переименовывается в дамп. Конечно, при переименовании может что-то не так. Так что есть очень-очень маленький шанс, но маловероятный.
RDB-файл может быть поврежден, если в базовом хранилище данных есть проблемы. Redis включает утилиту redis-check-dump для проверки файла, и вы можете использовать ее для проверки целостности вновь записанного файла дампа.
Если RDB поврежден при запуске, Redis не запустится и сообщит о какой-то загадочной ошибке. Есть пул реквест:
https://github.com/antirez/redis/pull/1744
Чтобы программа проверки запускалась автоматически, но она не была объединена (пока).
Файл дампа записывается в фоновом потоке, что означает, что он не может содержать 100% актуальную копию ключевого пространства. Чтобы получить это, вам нужно использовать файл AOF и настроить его на синхронизацию после каждой записи (что влияет на производительность).
Архитектура Redis позволяет вам создавать множество различных решений для этого. Вы можете включить запись AOF на главном сервере с помощью «never» fsync, а затем создать два подчиненных сервера, один из которых создает файлы RDB только каждые 10 минут, а другой, использующий AOF, с помощью fsync «always» или «everysec». Это даст вам встроенную избыточность на главном устройстве, если диск никогда не откажет, но если это произойдет, вы можете взять файл AOF с подчиненного устройства и использовать его для восстановления мастера. Если это не удалось, вы можете перейти к ведомому устройству RDB, но в этом случае вы можете потерять данные, записанные с момента последнего 10-минутного дампа.
Эта гибкость является частью того, что делает Redis таким мощным: вы можете выбирать, на основе данных, которые вы храните, какой уровень избыточности использовать.
В качестве альтернативы вы можете использовать размещенную службу Redis и позволить им позаботиться о деталях.