Управление персистентностью Redis

RedisBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе мы рассмотрим управление персистентностью Redis, уделяя особое внимание настройке и управлению долговечностью данных. Мы начнем с настройки персистентности Redis Database (RDB) с использованием команды CONFIG SET, которая позволяет нам создавать моментальные снимки наших данных Redis. Мы также рассмотрим включение персистентности Append-Only File (AOF), ручное сохранение данных, проверку времени последнего сохранения и переписывание файла AOF для оптимизации его размера.

Настройка персистентности RDB

На этом этапе мы настроим персистентность Redis Database (RDB). RDB создает моментальные снимки вашего набора данных в указанные интервалы времени. Мы будем использовать команду CONFIG SET для динамического изменения конфигурации сервера Redis без его перезапуска.

Сначала подключитесь к серверу Redis, используя интерфейс командной строки Redis (redis-cli). Откройте терминал и выполните следующую команду:

redis-cli

Вы увидите приглашение redis-cli, которое выглядит как 127.0.0.1:6379>.

Давайте проверим текущую конфигурацию сохранения RDB с помощью команды CONFIG GET.

CONFIG GET save

Вывод по умолчанию показывает несколько точек сохранения:

1) "save"
2) "900 1 300 10 60 10000"

Это означает, что Redis сохранит базу данных, если изменится как минимум 1 ключ за 900 секунд, ИЛИ изменится как минимум 10 ключей за 300 секунд, ИЛИ изменится как минимум 10000 ключей за 60 секунд.

Теперь давайте изменим это на одну точку сохранения: сохранять базу данных, если изменится как минимум 1 ключ за 60 секунд.

CONFIG SET save "60 1"

В качестве вывода вы должны увидеть OK, подтверждающее изменение.

OK

Проверьте, что конфигурация была обновлена:

CONFIG GET save

Вывод теперь должен отражать нашу новую настройку:

1) "save"
2) "60 1"

Далее мы настроим каталог, в котором Redis будет хранить свой файл RDB (dump.rdb). Сначала выйдите из redis-cli, чтобы выполнить некоторые команды оболочки.

exit

Теперь создайте новый каталог и установите правильные разрешения. Сервер Redis работает от имени пользователя redis, поэтому ему требуется владение каталогом для записи файлов.

sudo mkdir -p /var/lib/redis/labex_data
sudo chown redis:redis /var/lib/redis/labex_data

Снова подключитесь к Redis и установите конфигурацию dir на новый путь.

redis-cli
CONFIG SET dir /var/lib/redis/labex_data

Вы должны увидеть OK. Проверьте изменение:

CONFIG GET dir

Вывод подтвердит новый каталог:

1) "dir"
2) "/var/lib/redis/labex_data"

Теперь Redis будет сохранять свои файлы персистентности в каталог /var/lib/redis/labex_data.

Чтобы убедиться, что ваш прогресс сохранен и проверен правильно, пожалуйста, выйдите из сеанса redis-cli.

exit

Включение персистентности AOF

На этом этапе мы включим персистентность Append-Only File (AOF). AOF регистрирует каждую операцию записи, полученную сервером. Это обеспечивает лучшую долговечность по сравнению с RDB, поскольку данные записываются в журнал чаще.

Сначала подключитесь к серверу Redis:

redis-cli

Проверьте, включен ли AOF в данный момент, с помощью команды CONFIG GET.

CONFIG GET appendonly

По умолчанию он отключен:

1) "appendonly"
2) "no"

Чтобы включить AOF, установите параметр appendonly в значение yes.

CONFIG SET appendonly yes

В качестве вывода вы увидите OK. Теперь проверьте изменение:

CONFIG GET appendonly

Вывод должен подтвердить, что AOF теперь включен:

1) "appendonly"
2) "yes"

При включенном AOF Redis будет записывать все команды записи в файл appendonly.aof, расположенный в каталоге, который мы настроили на предыдущем шаге (/var/lib/redis/labex_data).

Давайте добавим некоторые данные, чтобы увидеть AOF в действии. Эта команда SET будет записана в файл AOF.

SET mykey "myvalue"

Вы должны увидеть следующий вывод:

OK

Чтобы убедиться, что ваш прогресс сохранен и проверен правильно, пожалуйста, выйдите из сеанса redis-cli.

exit

Ручное сохранение данных с помощью SAVE

На этом шаге вы узнаете, как вручную инициировать снимок RDB с помощью команды SAVE. Хотя Redis автоматически сохраняет данные на основе вашей конфигурации, ручное сохранение полезно для создания резервных копий или обеспечения сохранения данных перед запланированным техническим обслуживанием.

Сначала подключитесь к серверу Redis:

redis-cli

Давайте добавим новые данные, чтобы было что сохранять.

SET anotherkey "anothervalue"

Вы должны увидеть следующий вывод:

OK

Теперь вручную инициируйте сохранение на диск с помощью команды SAVE.

SAVE

Команда SAVE выполняет синхронное сохранение, что означает, что она будет блокировать все остальные клиентские запросы до завершения операции сохранения. Для больших баз данных это может вызвать заметную паузу.

После завершения сохранения вы увидите OK:

OK

Это подтверждает, что Redis успешно записал текущий набор данных в файл dump.rdb в каталоге /var/lib/redis/labex_data. Для производственных сред обычно предпочтительнее неблокирующая команда BGSAVE.

Чтобы убедиться, что ваш прогресс сохранен и проверен правильно, пожалуйста, выйдите из сеанса redis-cli.

exit

Проверка времени последнего сохранения с помощью LASTSAVE

На этом шаге мы используем команду LASTSAVE для проверки временной метки последнего успешного сохранения RDB. Эта команда полезна для мониторинга и проверки того, что ваша стратегия персистентности работает должным образом.

Сначала подключитесь к серверу Redis:

redis-cli

Чтобы получить временную метку последнего успешного сохранения, выполните команду LASTSAVE.

LASTSAVE

Команда возвращает Unix-временную метку, которая представляет собой количество секунд, прошедших с 1 января 1970 года (UTC). Вывод будет выглядеть примерно так, хотя число у вас будет другим:

(integer) 1678886400

Эта временная метка соответствует времени выполнения команды SAVE на предыдущем шаге.

Давайте посмотрим, как обновляется временная метка. Мы добавим больше данных, выполним еще одно ручное сохранение, а затем снова проверим время последнего сохранения.

SET anotherkey2 "anothervalue2"
SAVE
LASTSAVE

После выполнения этих команд вторая команда LASTSAVE вернет новую, более свежую временную метку, подтверждая создание нового снимка.

Чтобы убедиться, что ваш прогресс сохранен и проверен правильно, пожалуйста, выйдите из сеанса redis-cli.

exit

Перезапись AOF с помощью BGREWRITEAOF

На этом шаге мы узнаем, как перезаписать файл AOF с помощью команды BGREWRITEAOF. По мере работы вашего приложения файл AOF становится больше. Он может содержать множество избыточных команд (например, многократное инкрементирование счетчика). Перезапись файла AOF создает новый, компактный файл с минимальным набором команд, необходимых для восстановления текущего набора данных, что может значительно ускорить время запуска Redis.

Сначала подключитесь к серверу Redis:

redis-cli

Чтобы продемонстрировать эффект перезаписи, выполним несколько операций, которые добавят ненужные команды в лог AOF.

SET key1 "value1"
SET key2 "value2"
DEL key1
SET key3 "value3"

Файл AOF теперь содержит четыре команды. Однако для восстановления текущего состояния нам нужно только установить key2 и key3. Команды, связанные с key1, избыточны.

Теперь инициируйте фоновую перезапись файла AOF.

BGREWRITEAOF

Вы увидите подтверждающее сообщение о начале процесса:

Background append only file rewriting started

Redis выполняет эту операцию в фоновом режиме, поэтому она не блокирует клиентские запросы. Он создает временный файл AOF, записывает в него текущий набор данных наиболее эффективным способом, а затем атомарно заменяет старый файл AOF новым.

После завершения перезаписи файл appendonly.aof станет меньше и будет содержать только команды для установки key2 и key3.

Чтобы убедиться, что ваш прогресс сохранен и проверен правильно, пожалуйста, выйдите из сеанса redis-cli.

exit

Резюме

В этой лабораторной работе вы изучили основы управления персистентностью Redis. Вы отработали настройку механизмов персистентности RDB и AOF с помощью CONFIG SET. Вы также научились выполнять ручное сохранение данных с помощью команды SAVE, проверять время последнего сохранения с помощью LASTSAVE и оптимизировать файл AOF с помощью BGREWRITEAOF. Эти навыки необходимы для обеспечения долговечности данных и поддержания работоспособности экземпляра Redis.