Постоянство Redis также является одним из основных различий между Redis и Memcached, потому что у Memcached нет возможностей сохранения.Чтение и запись Redis все в памяти, поэтому его производительность высока, но данные в памяти будут потеряны при перезапуске сервера.Чтобы гарантировать, что данные не будут потеряны, нам нужно хранить данные в памяти, чтобы диск, чтобы при перезапуске Redis исходные данные можно было восстановить с диска, и весь процесс называется сохранением Redis.
1. Несколько способов настойчивости
Постоянство Redis имеет следующие три способа:
- метод снимка(RDB, Redis DataBase) Запись данных памяти в определенный момент на диск в бинарном виде;
- метод добавления файла(AOF, Append Only File), записывать все команды операций и добавлять их в файл в виде текста;
- Гибридная настойчивость, новый метод после Redis 4.0, гибридная персистентность, сочетающая в себе преимущества RDB и AOF.При записи сначала записывать текущие данные в начало файла в виде RDB, а затем записывать последующие команды операций в AOF Формат такой хранятся в файле, что может не только обеспечить скорость перезапуска Redis, но и снизить риск потери данных.
Поскольку каждая схема сохраняемости имеет определенные сценарии использования, давайте начнем с сохраняемости RDB.
2. Введение в РБД
RDB (Redis DataBase) — это процесс записи снимка памяти (Snapshot) в определенный момент на диск в бинарном виде.
3. Постоянный триггер
В RDB существует два типа методов запуска постоянства: один — ручной запуск, а другой — автоматический запуск.
1) Ручной триггер
Существует две операции для ручного запуска сохраняемости:save
иbgsave
, основное различие между ними заключается в следующем: блокировать ли выполнение основного потока Redis.
① сохранить команду
выполнить в клиентеsave
команда, она вызовет постоянство Redis, но также переведет Redis в состояние блокировки.Он не будет отвечать на команды, отправленные другими клиентами, до тех пор, пока не будет завершено постоянство RDB, поэтомуИспользуйте с осторожностью в производственных средах.
save
Команда используется следующим образом:
save
После команды сохранить файлdump.rdb
Время модификации изменено, что означает, чтоsave
Успешно запущена сохраняемость RDB.save
Поток выполнения команды показан на следующем рисунке:
② команда bgsave
bgsave (фоновое сохранение) означает как фоновое сохранение, так иsave
Самая большая разница между командами заключается в том, чтоbgsave
Он будет fork() дочернего процесса для выполнения сохранения.Во всем процессе есть только короткий блок, когда fork() дочерний процесс.После создания дочернего процесса основной процесс Redis может отвечать на запросы от других клиентов , Весь процесс заблокированsave
команда, очевидноbgsave
Команда больше подходит для использования.bgsave
Использование команды, как показано на следующем рисунке:
bgsave
Процесс выполнения показан на следующем рисунке:
2) Автоматический триггер
После разговора о методе ручного запуска RDB давайте посмотрим, как автоматически активировать сохраняемость RDB? Автоматическое сохранение RDB в основном возникает в следующих ситуациях.
① сохранить м п
save m n
Это означает, что в течение m секунд при изменении n ключей автоматически срабатывает постоянство.
Параметры m и n можно найти в конфигурационном файле Redis, например,save 60 1
Это означает, что в течение 60 секунд изменится как минимум один ключ, что вызовет персистентность RDB.
Суть автоматического запуска постоянства заключается в том, что Redis автоматически запустится один раз, если установленные условия запуска будут выполнены на основании суждения.bgsave
Заказ.
Примечание. Если задано несколько команд сохранения m n, любое из условий вызовет сохранение.
Например, мы настроили следующие две команды save m n:
- save 60 10
- save 600 1
Когда значение ключа Redis изменяется 10 раз в течение 60 с, срабатывает постоянство; если количество изменений значения ключа Redis в течение 60 с меньше 10 раз, Redis определит, было ли значение ключа Redis изменено по крайней мере в течение 600 с. если удовлетворено, вызовет настойчивость.
② заподлицо
flushall
Команда используется для очистки базы данных Redis. Ее следует использовать с осторожностью в производственной среде. При выполнении Redisflushall
После команды будет запущено автоматическое сохранение, и файл RDB будет очищен.
Результат выполнения показан на следующем рисунке:
③ Триггер синхронизации ведущий-ведомый
В репликации Redis master-slave, когда подчиненный узел выполняет операцию полной репликации, главный узел будет выполнятьbgsave
команду и отправить файл RDB на подчиненный узел, который автоматически активирует сохраняемость Redis.
4. Инструкции по настройке
Разумная настройка конфигурации RDB может обеспечить эффективную и стабильную работу Redis.Давайте посмотрим, что такое элементы конфигурации RDB?
Параметры конфигурации RDB можно найти в файле конфигурации Redis.Подробности следующие:
# RDB 保存的条件
save 900 1
save 300 10
save 60 10000
# bgsave 失败之后,是否停止持久化数据到磁盘,yes 表示停止持久化,no 表示忽略错误继续写文件。
stop-writes-on-bgsave-error yes
# RDB 文件压缩
rdbcompression yes
# 写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。
rdbchecksum yes
# RDB 文件名
dbfilename dump.rdb
# RDB 文件目录
dir ./
Наиболее важными параметрами являются следующие:
① сохранить параметрОн используется для настройки параметров, которые запускают условия сохранения RDB.При выполнении условий сохранения данные будут сохраняться на жестком диске. Описание конфигурации по умолчанию выглядит следующим образом:
- save 900 1: Указывает, что если хотя бы одно значение ключа изменится в течение 900 секунд, данные будут сохранены на жестком диске;
- save 300 10: Указывает, что если в течение 300 секунд изменится не менее 10 ключевых значений, данные будут сохранены на жестком диске;
- save 60 10000: указывает, что если в течение 60 секунд изменится не менее 10 000 значений ключей, данные будут сохранены на жестком диске.
② параметр rdbcompression
Его значение по умолчаниюyes
Указывает, что сжатие файлов RDB включено, и Redis будет использовать для сжатия алгоритм LZF. Если вы не хотите потреблять ресурсы процессора для сжатия файлов, вы можете отключить эту функцию.Недостаток этого заключается в том, что для сохранения файла требуется больше места на диске.
③ параметр rdbchecksum
Его значение по умолчаниюyes
Указывает, открывать ли проверку файла RDB при записи и чтении файлов, а также проверять наличие повреждений.Если повреждение обнаружено во время запуска, запуск будет остановлен.
5. Запрос конфигурации
Команды можно использовать для запроса текущих параметров конфигурации в Redis. Формат команды запроса:config get xxx
, например, чтобы получить параметр имени хранилища для файла RDB, используйтеconfig get dbfilename
, эффект выполнения показан на следующем рисунке:
config get dir
, эффект выполнения показан на следующем рисунке:
6. Параметры конфигурации
Существует два способа настройки конфигурации RDB:
- Вручную измените файл конфигурации Redis;
- Используйте настройки командной строки, например, с помощью
config set dir "/usr/data"
Это каталог хранилища, используемый для изменения RDB.
Уведомление: изменение файла конфигурации Redis вручную действует глобально, то есть перезапуск сервера Redis для установки параметров не будет потерян, но использование метода модификации команды будет потеряно после перезапуска Redis. Однако, если вы хотите вручную изменить файл конфигурации Redis, вам необходимо перезапустить сервер Redis, чтобы изменения вступили в силу немедленно, а командный метод не требует перезапуска сервера Redis.
Совет. Файл конфигурации Redis находится в корневом каталоге установочного каталога Redis, а имя по умолчанию — redis.conf.
7. Восстановление файла RDB
При запуске сервера Redis, если файл RDB dump.rdb существует в корневом каталоге Redis, Redis автоматически загрузит файл RDB для восстановления постоянных данных.
Если в корневом каталоге нет файла dump.rdb, сначала переместите файл dump.rdb в корневой каталог Redis.Убедитесь, что файл RDB загруженRedis имеет информацию журнала при запуске, которая покажет, загружен ли файл RDB.Выполняем команду запуска Redis:src/redis-server redis.conf
,Как показано ниже:
Совет. Во время загрузки файла RDB сервер Redis будет блокироваться до завершения загрузки.
8. Преимущества и недостатки RDB
1) Преимущества РБД
- Содержимое RDB — двоичные данные, которые занимают меньше памяти, более компактны и больше подходят в качестве файла резервной копии;
- RDB очень полезен для аварийного восстановления, это компактный файл, который можно быстрее передать на удаленный сервер для восстановления службы Redis;
- RDB может повысить скорость работы Redis в большей степени, поскольку основной процесс Redis будет fork() дочернего процесса каждый раз, когда он сохраняется для сохранения данных на диск, а основной процесс Redis не будет выполнять такие операции, как дисковый ввод-вывод. ;
- Файлы RDB можно перезапускать быстрее, чем файлы в формате AOF.
2) Недостатки РБД
- Поскольку RDB может сохранять данные только в течение определенного интервала времени, если служба Redis неожиданно завершается в середине, данные Redis за определенный период времени будут потеряны;
- RDB необходимо часто использовать fork(), чтобы сохранить его на диске с помощью подпроцесса. Fork() может занимать много времени, если набор данных большой, и может привести к тому, что Redis перестанет обслуживать клиентов на несколько миллисекунд или даже на секунду, если набор данных большой, а производительность процессора низкая.
9. Отключить постоянство
Отключение сохраняемости может повысить эффективность выполнения Redis. Если он не чувствителен к потере данных, его можно выполнять при подключении клиента.config set save ""
Команда может отключить сохранение Redis, как показано на следующем рисунке:
10. Резюме
Из этой статьи мы можем узнать, что сохраняемость RDB делится на два способа: ручной запуск и автоматический запуск. Его преимущества заключаются в том, что файл хранилища небольшой, а восстановление данных происходит быстрее при запуске Redis. Недостатком является то, что существует риск потери данных. Восстановление файлов RDB также очень просто: просто поместите файлы RDB в корневой каталог Redis, и данные будут автоматически загружены и восстановлены при запуске Redis.
11. Вопросы на размышление
Если загрузка ЦП сервера Redis слишком высока, в чем может быть причина? Вы можете написать свои ответы в разделе комментариев.
12. Ссылки и благодарности
блог woo woo woo.cn on.com/so ocean/afraid/9…
Блог Woohoo.cn на.com/Я боюсь Лю/937…
Следуйте QR-коду ниже, чтобы подписаться на более интересный контент.