Что такое персистентность в Redis и какие механизмы её обеспечивают?

«Что такое персистентность в Redis и какие механизмы её обеспечивают?» — вопрос из категории Базы данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные механизмы:

  1. RDB (Redis Database File) — Создание снимков (snapshots)

    • Периодически сохраняет полный дамп данных в бинарный файл.
    • Плюсы: Быстрое сохранение/восстановление, компактные файлы.
    • Минусы: Возможна потеря данных, созданных между снимками.
    • Настройка в redis.conf:
      save 900 1    # сохранить через 15 мин, если >=1 изменение
      save 300 10   # сохранить через 5 мин, если >=10 изменений
      save 60 10000 # сохранить через 1 мин, если >=10000 изменений
      rdbcompression yes # сжатие файла
  2. AOF (Append Only File) — Логирование операций

    • Записывает каждую команду, изменяющую данные, в лог-файл. При перезапуске команды воспроизводятся.
    • Плюсы: Высокая надежность, минимальная потеря данных.
    • Минусы: Файлы больше, производительность может быть ниже.
    • Настройка в redis.conf:
      appendonly yes
      appendfsync everysec # баланс между надежностью и скоростью
      # Другие варианты:
      # appendfsync always  # максимальная надежность, но медленно
      # appendfsync no      # ОС решает, возможна потеря данных

Рекомендация: Для максимальной надежности часто используют оба механизма одновременно (RDB + AOF). AOF обеспечивает долговечность, а RDB позволяет быстро создать резервную копию и ускорить перезапуск.