Как управлять ключами и базами данных Redis

    Команда Simple-Server
    03.06.2026
    10 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Но сначала чуть подробнее остановимся на типах, поддерживаемых системой данных. Основой для работы остаются ключи, представляющие собой двоичный код с максимальной длиной строки в 512 МБ. Остальные категории Redis поддерживает в качестве значений.

    Строки — это простая последовательность байтов. Они никак не влияют на исполнение двоичного кода, поэтому данные в них не ограничивают какими-либо спецсимволами. Максимальный объем строки составляет 512 МБ, содержимое практически любое: текст, целые числа или с плавающей запятой, картинки, видео, другие медиафайлы.

    redis 127.0.0.1:6379> SET name "educative"  OK  redis 127.0.0.1:6379> GET name  "educative"

    В нем name — это непосредственно сам ключ, а educative — строковое значение, которое пользователь планирует сохранить в базе данных.

    Следующий по логике вариант – списки строк. Обычно элементы внутри списка хранятся в связи друг с другом, в отсортированном виде по порядку вставки в БД. Особенность Redis состоит в том, что скорость вставки 500 взаимосвязанных записей, объединенных в списки, и 50 000 таких же, не отличается. Это делает систему удобной для обработки больших и очень больших объемов данных.

    Пример составления результирующих списков:

    LPUSH mylist x   # теперь лист - "x" LPUSH mylist y   # теперь лист - "y","x" RPUSH mylist z   # теперь лист - "y","x","z" (в этом случае использовался RPUSH)

    Вариант предыдущей категории, единственное отличие заключается в отсутствии упорядоченности строк. База никак не сортирует их, не допускает появления дублей. Такой режим хранения полезен, когда требуется соблюсти уникальность информации, нельзя путать заданную последовательность (пусть и нелогичную на первый взгляд).

    Пользователю доступен выбор варианта сортировки. Например, если оценка двух элементов будет одинакова, можно проверить, какая строка лексикографически больше, и разместить их согласно этому критерию. Технически к каждому сортируемому блоку привязывается определенное число, называемое счетом. За счет них и собираются «наборы».

    Тип данных «хеш» – это пара значений конкретного поля. В них допускается хранить миллионы объектов при сохранении небольшого экземпляра самого хеша (в цифрах это значение достигает 232). Такая особенность позволяет использовать всего одну БД независимо от количества аккаунтов, объема вносимых данных. Пример использования:

    HMSET user:1000 username antirez password P1pp0 age 34 HGETALL user:1000 HSET user:1000 password 12345 HGETALL user:1000

    По умолчанию, без предварительной настройки, Redis содержит 16 баз данных, изолированных друг от друга. За счет изоляции вы можете спокойно запускать ту или иную команду для изменений в определенной базе, не переживая о том, что это как-то затронет данные за ее пределами.

    Базы данных имеют порядковые номера от 0 до 15, и по умолчанию вы подключитесь к базе номер 0. Изменить эту настройку можно через select, которую необходимо выполнить после коннекта. Например, выберем базу данных 10:

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

    Если специфическая БД не выбрана и вы работаете с базой 0, ее номер не будет отображаться дополнительно:

    Команда swapdb**** используется для копирования данных из одной БД в другую, с их полной заменой в соответствующих ячейках таблицы целевой базы. Например, ниже мы заменим значение из базы 1 информацией из базы 2:

    При успешном выполнении операции будет выведено OK. Изменения будут применены мгновенно.

    Команда migrate**** используется для перемещения ключа между экземплярами Redis, с его удалением из исходника. Она содержит перечисленные ниже элементы в указанном порядке:

    • хост или IP-адрес БД, куда переносится информация;
    • номер порта новой базы;
    • название переносимого ключа;
    • номер базы от 0 до 15, где вы хотите сохранить его;
    • тайм-аут — максимальный период простоя в миллисекундах.
    migrate 123.45.4.134 6379 key_1 6 8000

    В конец команды, после перечисленных выше элементов, можно добавить одну из следующих опций:

    • COPY: отменит удаление ключа (тот копируется в целевую БД и одновременно сохранится в текущей);
    • REPLACE: при наличии нужного блока в целевом экземпляре, он удаляется и заменяется переносимым;
    • KEYS: позволит не указывать конкретный ключ в команде (а точнее, указать его в виде пустого значения ""), а затем после keys ввести определенный шаблон (см. описание в документации) и перенести весь объем данных, который ему соответствует.

    Ниже приведем примеры нескольких основных команд Redis для работы с ключами.

    Для переименования ключа используйте rename:

    rename старое_имя_ключа новое_имя_ключа

    Команда randomkey**** используется, чтобы вывести данные из базы случайным образом:

    В выводе будет отображен ключ.

    Команда type**** позволяет вывести тип данных. В выводе будет указан один из возможных вариантов: string, list, hash, set, zset, stream, либо none — если такой ключ отсутствует в базе.

    Команда move**** переместит ключ между БД внутри одного экземпляра Redis (в отличие от migrate, переносящей их в «другой» экземпляр Redis). В строку включают наименование ключа и целевого файла базы данных. Например, ниже мы передадим данные в базу 6:

    При успешном выполнении операции будет выведено ОК.

    Для удаления одного или нескольких ключей, используется del:

    del имя_ключа_1 имя_ключа_2

    При положительном результате будет выведено (integer) 1. Если что-то пошло не так, вы увидите (integer) 0.

    Команда unlink**** функционально похожа на del, но имеет нюансы. Для освобождения памяти, занятой ключом, del**** временно заблокирует клиента. Если времени для этого требуется совсем мало (в случае, когда тот связан с небольшим объектом), факт блокировки, скорее всего, будет незаметным. Если же ключ связан с большим количеством объектов, то удаление будет идти достаточно долго, и в это время выполнение любых других операций будет невозможно.

    В отличие от del, команда unlink**** предварительно оценит затраты на освобождение памяти, занятой ключом. Если они незначительные, unlink**** сработает так же, как del, временно заблокировав клиента. Если же освобождение памяти требует больших затрат, удаление будет происходить асинхронно: unlink**** работает в фоновом режиме и постепенно освобождает память без блокировки клиента:

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

    Длямассового удаления ключей применяют одну из команд – flushdb**** и flushall.

    Будьте очень внимательны, процедура происходит без возможности восстановления (применительно к одной или нескольким БД).

    Для удаления всех ключей в текущей базе внесите:

    Чтобы убрать все ключи во всех БД на платформе Redis, используйте:

    Обе команды имеют режим асинхронного удаления ключей, для этого добавляют опцию async. В этом случае они сработают так же, как unlink, с постепенной очисткой памяти на фоне других операций.

    Для создания резервной копии текущей базы, можно применить:

    В результате выполнения команды снапшот текущей информации экспортируется в файле .rdb.

    Важно учитывать, что save**** при выполнении блокирует все другие клиенты, обращающиеся к базе данных. Поэтому официальная документация рекомендует запускать команду save**** только в тестовой среде.

    Вместо нее предлагается применять bgsave. Она сообщает Redis о необходимости создать форк БД: родительский процесс продолжит обслуживание клиентов, а дочерний выгрузит бэкап базы данных. Если в период обработки команды bgsave**** будут выполняться изменения, они не попадут в снапшот.

    Также можно настроить автоматическое регулярное создание снапшотов, которое сработает при условии, что в базу было добавлено определенное количество изменений. Этим создается «точка сохранения». По умолчанию в файле конфигурации redis.conf указаны следующие настройки для точки сохранения:

    /etc/redis/redis.conf . . . save 900 1 save 300 10 save 60 10000 . . . dbfilename "nextfile.rdb" . . .

    Согласно такой настройке, Redis выгрузит снапшот БД в файл, указанный в строке dbfilename с периодичностью 900 секунд, если изменился хотя бы 1 ключ; 300 секунд, если изменилось 10 ключей или более; каждые 60 секунд при изменении 10000 и более ключей.

    Еще одна команды для создания бэкапа — shutdown. Она заблокирует каждый клиент, подключенный к базе, выполнит save и закроет соединение. Важно учитывать, что команда сработает аналогично save, а значит:

    • Снапшот будет создан, только если настроена точка сохранения.
    • При блокировке клиентов во время выполнения команды shutdown необходимые данные могут стать недоступны для пользователей или приложений. Ее стоит использовать только в тестовой среде и при полной уверенности, что вы можете без последствий заблокировать все клиенты сервера.

    Если точка сохранения не настроена, но вы хотите создать снапшот, добавьте save к команде:

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

    Также команда shutdown обнуляет изменения в append-only файл (содержимое не меняется, а все новое добавляется в конец) перед отключением, если включена функция AOF (Append Only File, «только дополнение»). Он заполняет журнал по всем операциям записи на накопителях в файл .aof.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны