#redis
#redis
Вопрос:
Этот вопрос касается сохранения Redis.
Я использую redis как «быстрый сервер» для веб-сайта социальной сети. Это настройка одного сервера. Я постоянно передаю обязанности PostgreSQL Redis. В настоящее etc/redis/redis.conf
время для параметра appendonly установлено значение appendonly no
. Параметры save 900 1
моментальной съемки , save 300 10
, save 60 10000
. Все это верно как для производства, так и для разработки. Согласно производственным журналам, save 60 10000
вызывается интенсивно. Означает ли это, что практически я получаю резервные копии каждые 60 секунд?
В некоторых источниках предлагается использовать резервные копии AOF и RDB вместе. Таким образом, я взвешивал включение appendonly on
и использование appendfsync everysec
. Для всех, кто имел опыт работы с обеими сторонами медали:
1) Приведет ли использование appendonly on
и appendfsync everysec
к снижению производительности? Это ударит по процессору? Нагрузка на запись очень высока.
2) Как только я перезапущу сервер redis с этими новыми настройками, я все равно потеряю последние 60 секунд своих данных, правильно?
3) Стоит ли беспокоиться о времени перезапуска? Мой dump.rdb
файл небольшой; ~ 90 МБ.
Я пытаюсь узнать больше о постоянстве redis и оправдать свои ожидания. Лично я согласен с потерей 60-х данных в случае катастрофы, поэтому я также размышляю о том, следует ли мне использовать AOF. Не стесняйтесь подключаться. Спасибо!
Ответ №1:
Означает ли это, что практически я получаю резервные копии каждые 60 секунд?
НЕТ. Redis сохраняет фоновое сохранение через 60 секунд, если было изменено не менее 10000 ключей. В противном случае сохранение в фоновом режиме не выполняется.
Приведет ли использование appendonly on и appendfsync everysec к снижению производительности? Это ударит по процессору? Нагрузка на запись очень высока.
Это зависит от многих факторов, например, от производительности диска (SSD ПРОТИВ HDD), нагрузки на запись / чтение (QPS), модели данных и так далее. Вам нужно выполнить тест с вашими собственными данными в вашей конкретной среде.
Как только я перезапущу сервер redis с этими новыми настройками, я все равно потеряю последние 60 секунд своих данных, правильно?
нет. Если вы включите как AOF, так и RDB, при перезапуске Redis файл AOF будет использоваться для восстановления базы данных. Поскольку вы настроили его на appendfsync everysec
, вы потеряете только последнюю 1 секунду данных.
Стоит ли беспокоиться о времени перезапуска? Мой файл dump.rdb небольшой; ~ 90 МБ.
Если вы включите AOF, и когда Redis перезапустится, он воспроизведет журналы в файле AOF для восстановления базы данных. Обычно размер файла AOF превышает размер файла RDB, и это может быть медленнее, чем восстановление из файла RDB. Стоит ли беспокоиться об этом? Проведите тест с вашими собственными данными в вашей конкретной среде.
Редактировать
ВАЖНОЕ ЗАМЕЧАНИЕ
Предположим, что вы уже настроили Redis на использование сохранения в RDB и записываете в Redis много данных. Через некоторое время вы захотите включить сохранение AOF. НИКОГДА НЕ ИЗМЕНЯЙТЕ КОНФИГУРАЦИОННЫЙ ФАЙЛ, ЧТОБЫ ВКЛЮЧИТЬ AOF И ПЕРЕЗАПУСТИТЬ REDIS, ИНАЧЕ ВЫ ПОТЕРЯЕТЕ ВСЕ.
Потому что, как только вы установите appendonly yes
в redis.conf и перезапустите Redis, он загрузит данные из файла AOF, независимо от того, существует файл или нет. Если файл не существует, он создает пустой файл и пытается загрузить данные из этого пустого файла. Таким образом, вы потеряете все.
На самом деле, вам не нужно перезапускать Redis, чтобы включить AOF. Вместо этого вы можете использовать config set
command для динамического включения: config set appendonly yes
.
Комментарии:
1. При первом включении мне
appendonly on
придется перезапустить. Не потеряю ли я данные в этот момент времени, потому что резервных копий AOF до этого не существовало?2. Он должен быть воссоздан из RDB, если нет AOF
3. @HassanBaig НЕТ!!! Вы потеряете все. Надеюсь, вы этого еще не сделали… После установки
appendonly yes
в redis.conf и перезапуска Redis он загрузит данные из файла AOF, независимо от того, существует файл или нет. Если файл не существует, он создает пустой файл и пытается загрузить данные из этого пустого файла. Таким образом, вы потеряете все. На самом деле, вам не нужно перезапускать Redis, чтобы включить AOF. Вместо этого вы можете использоватьconfig set
command для динамического включения:config set appendonly yes
4. @ifelsemonkey Если
AOF
включено, Redis будет использовать файл только для добавления для инициализации базы данных.5. Большое спасибо за этот комментарий. К сожалению, мой коллега недавно внес это изменение конфигурации перезапуск рабочей базы данных. Я пытался выяснить, что произошло, и этот пост сэкономил мне много времени. К счастью, у нас есть резервные копии, и, похоже, мы сможем восстановить все данные.