Redis — одна из самых популярных современных СУБД (систем управления базами данных). В статье расскажем о том, как пользоваться Redis. Вы узнаете про главные особенности этой системы, типы данных, команды, а также поговорим о преимуществах кэширования данных при помощи этой СУБД.
Redis относится к нереляционным СУБД, то есть она работает не только с табличными значениями, но и с другими типами данных: например, со строками и списками, хешами, множествами. Работа с данными реализована по принципу «ключ-значение» (key-value). В «Редисе» нет языка SQL, зато можно использовать lua-скрипты. А еще эта СУБД отличается повышенной производительностью за счет того, что данные хранятся прямо в оперативной памяти сервера (in-memory), что позволяет выполнять большее количество операций.
СУБД Redis предназначена главным образом для выполнения следующих задач (но не ограничивается ими):
Чтобы запустить Redis, сначала его нужно скачать. Свежая версия СУБД доступна на официальной странице. По умолчанию «Редис» поддерживает только Ubuntu и MacOS, однако запуск в Windows также возможен, и это можно сделать по-разному. Например, при помощи Docker, а еще через менеджер пакетов Chocolatey (после установки Chocolatey нужная версия Redis без проблем находится через поиск этого менеджера пакетов).
Сам Redis запускается при помощи инструкции redis-server
, а корректность установки проверяется инструкцией redis-cli
.
Такой забавный ответ свидетельствует о том, что СУБД установлена правильно:
127.0.0.1:6379> ping
PONG
В этой части рассмотрим основные типы данных, а в процессе изучим ряд команд. Инструкций в этой СУБД довольно много, поэтому познакомимся с наиболее важными, но сначала поговорим о «кирпичиках», составляющих основу всей системы. Это ключи.
Ключи в Redis являются уникальными идентификаторами значений, которые связаны с ними. Значения могут быть различными: целочисленными, строковыми и даже объектами, содержащими другие вложенные значения. Ключи же используются в качестве указателей, обозначающих место хранения данных. Здесь уместно провести аналогию со шкафчиками в магазине, куда покупатели временно складывают вещи. Значение — то, что лежит в этом шкафчике, а доступ к нему осуществляется по ключу с номером.
Переходим к типам данных. Строка (string
) является базовым типом данных, который содержит в себе все остальные данные. Строки в «Редис» по своим функциям аналогичны строкам в языках программирования. Максимально допустимый размер строки в Redis — 512 МБ.
Список (list
) представляет собой последовательности значений, которые располагаются в списке в порядке создания. Чтобы создать список, познакомимся с некоторыми командами. LPUSH
добавляет элемент, а LRANGE
используется для вывода списка слева. Вводим инструкции с указанием элементов списка:
LPUSH obj1 element1
(integer) 1
LPUSH obj1 element2
(integer) 2
LPUSH obj1 element3
(integer) 3
LRANGE obj1 0 -1
И получаем следующий вывод:
1) "element3"
2) "element2"
3) "element1"
Суть хешей (hash
) или хеш-таблиц будет сразу понятна тем, кто программировал на Python или JavaScript. В Python очень похожими на хеши являются словари, а в JavaScript — объекты. Чтобы записать значение в хеш, в Redis есть команда HSET
, а для чтения используется HGET
. Пример:
HSET obj att1 val1
(integer) 1
HSET obj att2 val2
(integer) 1
HGET obj att1
"val1"
Если же нужно получить все значения, применяем инструкцию HGETALL
:
HGETALL obj
1) "att1"
2) "val1"
3) "att2"
4) "val2"
Под множеством (set
) в «Редис» понимают неупорядоченную коллекцию уникальных элементов. Чтобы добавить туда очередной элемент, введем команду SADD
:
SADD objects object1
(integer) 1
SADD objects object2
(integer) 1
SADD objects object3
(integer) 1
SADD objects object1
(integer) 0
Теперь, чтобы получить все элементы, нужно ввести инструкцию SMEMBERS
:
SMEMBERS objects
1) "object2"
2) "object3"
3) "object1"
Также существуют и другие инструкции для работы с множествами. Например, SUNION
позволяет объединять их.
Чтобы добавить элемент в упорядоченное множество (sorted set
), используют команду ZADD
:
ZADD objects 1230 val1
(integer) 1
ZADD objects 1231 val2
(integer) 1
ZADD objects 1232 val3
(integer) 1
Теперь с помощью инструкции ZRANGE
получаем срез:
ZRANGE objects 0 -1
1) "val1"
2) "val2"
3) "val3"
Следующие команды также будут полезны начинающим для работы с ключами:
HKEYS
выводит все ключи, записанные в хеш. Давайте сначала запишем значения в хеш, а затем выведем ключи:HSET object1 type "table"
(integer) 1
HSET object1 dimensions 75-50-50
(integer) 1
HKEYS object1
1) "type"
2) "dimensions"
HVALS
:HVALS object1
1) "table"
2) "75-50-50"
EXISTS
служит для проверки существования ключа. Если он существует, выводится 1, если нет, то 0. Например:EXISTS dimensions
(integer) 1
EXISTS instructions
(integer) 0
RENAME
. Сначала указывается ключ для переименования и сразу же вводится новое имя:RENAME dimensions profile
OK
HKEYS object1
1) "type"
2) "profile"
DEL
:DEL profile
(integer) 1
HKEYS object1
1) "type"
Одной из задач, которые решает Redis, является эффективное кэширование данных. В этом случае он часто работает вместе с реляционными СУБД, например, PostgreSQL. Кэширование позволяет быстро загружать небольшие объекты, которые часто обновляются, и при этом минимизирует риск потерь информации. Redis служит буферной СУБД и, в ответ на запрос пользователя, выполняет проверку по ключу, не затрагивая основную БД. Это в разы снижает нагрузку на ресурсы с высокой посещаемостью (от нескольких тысяч пользователей в час).
Чтобы организовать кэширование, нужно подключить соответствующие библиотеки, и вы можете использовать для этого различные языки программирования. Например, в Python это делается через функцию импорта:
import redis
import sqlite
Затем настраивается соединение с базой данных SQL:
def get_my_friends():
connection = sqlite.connect(database="database.db")
cursor = connection.cursor()
А далее у СУБД запрашивается наличие ключа:
redis_client = redis.Redis()
После этого можно переходить к прописыванию ключей для вашей БД.
При помощи каналов событий реализуется механизм подписок, когда публикуемые сообщения могут читать подписавшиеся на канал клиенты. Технически это напоминает обычный чат, который может оказаться полезным группе разработчиков. Однако при этом нет гарантии, что сообщения, отправленные по такому каналу, будут прочитаны. Подписка на канал оформляется по инструкции SUBSCRIBE
, после которой указывается название канала, например:
SUBSCRIBE timeweb_channel
Сообщения публикуются с использованием команды PUBLISH
:
PUBLISH timeweb_channel "Привет, мы запустили новый канал!"
(integer) 2
Вернувшееся значение (2) — это число подписчиков, которые получили сообщение.
Итак, мы познакомились с тем, как работает Redis, изучили основные команды и научились работать с несколькими типами данных, а также узнали о некоторых специальных возможностях (организация кэширования и каналы событий). Для более глубокого изучения возможностей этой СУБД рекомендуем прежде всего ознакомиться с официальной документацией. Также в сети можно найти книги и бесплатные руководства, в которых описываются продвинутые методы работы с «Редис».
Классно