В этой статье мы расскажем о том, что такое Redis, а также рассмотрим команды для работы с ней.
Что такое Redis
Redis (Remote Dictionary Server) — это нереляционная (NoSQL) система управления базами данных. Ее первую версию представил разработчик Сальваторе Санфилиппо 10 мая 2009 года.
СУБД Redis написана на языке C и имеет открытый исходный код. Она относится к числу самых производительных СУБД, так как время отклика сервера можно измерять в долях миллисекунд. Это происходит благодаря хранению данных в кэше: их не нужно перемещать на диск, поэтому сокращается задержка ядра и увеличивается пропускная способность.
Помимо высокой производительности, система управления базами данных Redis обладает дополнительными преимуществами:
- Поддержка различных структур данных. Часто СУБД работают с ограниченным числом типов данных. Однако это не относится к Редис: она поддерживает битовые массивы, строки, хэши, потоки, списки, гиперлоги, JSON и др.
- Масштабируемость. Redis позволяет настроить кластерную архитектуру, а также выбирать размер и наращивать мощности каждого из кластеров: можно воспользоваться вертикальным или горизонтальным масштабированием.
- Высокая функциональность. При помощи Redis можно создать сложный код с простой структурой для работы с данными. СУБД Редис поддерживает такие языки, как Java, JavaScript, PHP, C++, Python, Node.js, Ruby, Go и многие другие.
- Поддержка асинхронной репликации. Благодаря этой функции в Redis можно копировать информацию на несколько взаимосвязанных серверов одновременно. Это позволяет равномерно распределить запросы между серверами в сети и увеличить скорость чтения и восстановления данных.
В чем отличие синхронной и асинхронной репликации
Репликация — это процесс, во время которого синхронизируются несколько копий (реплик) одного объекта. В нашем случае объект — это база данных.
Если вы обновили фрагмент данных в одной из копий, при синхронной репликации такие же фрагменты во всех копиях обновляются во время одной транзакции. Однако если речь идет об асинхронной репликации, изменения в реплике полностью сохраняются спустя некоторое время, в разных транзакциях.
Для каких целей используется Redis
Как правило, СУБД Redis используют для следующих целей:
- СУБД для крупномасштабных приложений — Редис помогает равномерно распределить трафик;
- хранение данных, которые используют при анализе покупательской активности на маркетплейсах или небольших интернет-магазинах;
- хранение промежуточных данных, которые собирают с помощью таблиц, форм голосования и других вариантах опросов;
- машинное обучение, чтобы автоматизировать принятие решений и обрабатывать большие объемы данных;
- создание ранжированных списков в режиме реального времени;
- хранение сессий — это могут быть корзины в интернет-магазинах или части кода страниц;
- создание новостных лент, комментариев и чатов в социальных сетях и личных блогах;
- кэширование информации из основного хранилища;
- снижение нагрузки при массовых email-рассылоках.
Как управлять базами данных и ключами в Redis
Для корректной работы каждая база данных Redis использует модель «ключ-значение». Что означает каждое из этих понятий?
Значение — это данные, которые хранятся в базе. Это могут быть строки, списки, множества, хэши и многое другое.
Ключ — это уникальный идентификатор в базе данных, который присваивается каждому значению в базе.
Предположим, что вы заполняете файл со списком сотрудников. Скорее всего, каждой фамилии в нем присваивается порядковый номер. Это выглядит следующим образом:
Если представить этот список как базу данных в формате «ключ-значение», то:
- сам файл со списком сотрудников — это база данных;
- каждая фамилия из списка — это отдельное значение;
- все порядковые номера, которые присвоены каждой фамилии — это ключи.
Управлять целыми базами данных и отдельными ключами из нее можно с помощью командной строки. Чтобы открыть консоль Redis, используется команда:
redis-server
Ниже мы приложили шпаргалку, чтобы вы могли выполнять основные операции в консоли.
Команды для работы с базами данных
Стандартный экземпляр Redis поддерживает 16 баз данных, которые отделены друг от друга. Это значит, что запуск одной БД не влияет на остальные базы.
Чтобы выбрать базу данных и начать работу с ней, используется следующая команда:
select XX
Вместо XX укажите номер базы данных в диапазоне от 0 до 15.
Функционал Redis позволяет скопировать данные в одной БД и добавить их в другую базу с заменой старой информации. Выполнить эту операцию поможет специальная команда:
swapdb X Y
Где:
- X — номер той базы данных, из которой нужно скопировать данные, в диапазоне от 0 до 15;
- Y — номер базы данных, в которую нужно добавить данные, в диапазоне от 0 до 15.
Чтобы создать бэкап базы данных в формате .rdb, используйте команду:
save
Обратите внимание: эта команда выполняется синхронно и блокирует все клиенты, которые подключены к базе данных. Если вы создаете бэкап в производственной среде, рекомендуем выполнить другую команду.
Команда, аналогичная save:
bgsave
Она выполняется асинхронно и подходит для выполнения в любых условиях.
Команды для работы с ключами в базе данных
Каждый ключ в базе данных Redis связан с определенным значением — то есть содержимым ячейки. Для работы с ними существует большое количество команд.
Например, переименовать ключ можно с помощью следующей команды:
rename old_key_name new_key_name
Где:
- old_key_name — прежнее название ключа,
- new_key_name — новое название ключа.
Если команда выполнена корректно, на экране отобразится сообщение OK.
Чтобы получить случайный ключ из выбранной базы данных, используется команда:
randomkey
В выводе команды отобразится имя случайного ключа.
Чтобы узнать, данные какого типа содержатся в ключе, выполните команду:
type key_name
Вместо key_name укажите имя ключа.
Если команда выполнена успешно, на экране отобразится один из типов данных: string, list, hash, set, zset, или stream. Если ключа не существует, в выводе будет указано none.
Чтобы перенести ключ из выбранной базы данных в другую, используйте следующую команду:
move key_name X
Где:
- key_name — имя ключа, который нужно переместить;
- X — номер базы данных, в которую нужно переместить ключ, в диапазоне от 0 до 15.
После выполнения команды на экране отобразится OK.
Чтобы удалить ключи, используйте команду:
del key_name
Вместо key_name укажите имя ключа.
Если вам нужно удалить несколько ключей, укажите их через пробел:
del key_name _1 key_name _2
Где:
- key_name _1 — имя первого ключа,
- key_name _2 — имя второго ключа.
Существует команда, которая аналогична del
. Она так же используется для удаления ключей, однако действует асинхронно:
unlink key_name
Вместо key_name укажите имя ключа.
Чтобы переместить ключ в другой экземпляр Redis, выполните команду:
migrate 123.123.123.123 1234 key_name X 1000
Где:
- 123.123.123.123 — IP-адрес сервера, на который нужно переместить ключ;
- 1234 — порт для подключения к целевой базе данных;
- key_name — имя ключа;
- X — номер целевой базы данных в диапазоне от 0 до 15;
- 1000 — максимальное время простоя между двумя серверами в миллисекундах.
Команда migrate поддерживает дополнительные опции.
COPY — скопировать ключ, не удаляя из предыдущего экземпляра Redis. При этом условии команда будет иметь следующий вид:
migrate 123.123.123.123 1234 key_name X 1000 [COPY]
REPLACE — если перемещаемый ключ существует в целевой базе данных, нужно заменить его на новый. При этом условии команда будет выглядеть так:
migrate 123.123.123.123 1234 key_name X 1000 [REPLACE]
Обратите внимание: выполнение следующих команд ведет к удалению содержимого одной или всех баз данных на сервере. Перед их выполнением рекомендуем создать резервные копии тех баз, которые вы планируете удалить.
Чтобы удалить все ключи из выбранной базы данных выполните команду:
flushdb
Чтобы удалить все ключи во всех БД этого экземпляра Redis, используйте команду:
flushall
Мы перечислили те команды, которые чаще всего используются при работе с СУБД Redis. Если вам потребуется дополнительная информация, ее можно получить в официальной документации.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊