Комплексные типы данных
Хеш таблицы
Redis позволяет в качестве значения, использовать ключ значение. Что по сути будет почти аналогией объектов из JavaScript. Для записи объекта используется команда HSET в следующем формате:
HSET имя_ключа имя_атрибута значение
Для чтения объекта используется команда HGET в формате:
HGET имя_ключа имя_атрибута
Команда HGETALL используется для получения:
127.0.0.1:6379> HSET obj attr1 value1
(integer) 1
127.0.0.1:6379> HSET obj attr2 value2
(integer) 1
127.0.0.1:6379> HGET obj attr1
"value1"
127.0.0.1:6379> HGETALL obj
1) "attr1"
2) "value1"
3) "attr2"
4) "value2"
Множества
Не упорядоченная коллекция уникальных элементов. Для добавление нового элемента во множество используется команда SADD.
Для получения все элементов используется команда SMEMBERS.
SUNION используется для объединение множеств.
SDIFF используется для вычитания из первого множества второго.
SINTER возвращает общие элементы указаных множеств.
SPOP удаляет и возвращает случайный элемент множества.
127.0.0.1:6379> SADD objects obj1
(integer) 1
127.0.0.1:6379> SADD objects obj2
(integer) 1
127.0.0.1:6379> SADD objects obj3
(integer) 1
127.0.0.1:6379> SADD objects obj1
(integer) 0
127.0.0.1:6379> SMEMBERS objects
1) "obj2"
2) "obj3"
3) "obj1"
Упорядоченные множества
Упорядоченная коллекция уникальных элементов. Для добавление нового элемента в упорядоченное множество используется команда ZADD в формате:
ZADD имя_ключа порядковое_число_упорядочивания_множества значение
Команда ZRANGE возвращает срез данных множества:
127.0.0.1:6379> ZADD objects 1500 value1
(integer) 1
127.0.0.1:6379> ZADD objects 1600 value2
(integer) 1
127.0.0.1:6379> ZADD objects 1700 value3
(integer) 1
127.0.0.1:6379> ZRANGE objects 0 -1
1) "value1"
2) "value2"
3) "value3"
Списки
Список это последовательность значений упорядоченных по порядку их создания. Аналог двух-стороннего стека в который можно добавлять с двух сторон. Списки обычно применяются для создания очередей.
Команда добавления элемента в список LPUSH.
LRANGE возвращает срез списка с левой стороны в формате:
LRANGE имя_списка индекс_начало индекс_конца
Указание -1 означает до конца списка.
LPOP вернуть одно значение c левой стороны и удалить его из списка в формате:
LPOP имя_списка
Аналогичные команды RPUSH, RRANGE, RPOP только для правой стороны.
127.0.0.1:6379> LPUSH obj1 value1
(integer) 1
127.0.0.1:6379> LPUSH obj1 value2
(integer) 2
127.0.0.1:6379> LPUSH obj1 value3
(integer) 3
127.0.0.1:6379> LRANGE obj1 0 -1
1) "value3"
2) "value2"
3) "value1"
127.0.0.1:6379>
Транзакции
Транзакции в Redis это просто последовательное выполнение ранее записаных команд без возможности полноценного возвращения исходного состояния в случае ошибки исполнения.
С помощью команды MULTI можно начать запись команд. Далее введенные команды не исполняются, а записываются в буфер. Это будет происходит до ввода команды на исполнения транзакции EXEC. Далее все ранее введенные команды будут исполнены один за другим. Команда DISCARD отмена записи команд транзакций. Если возникнет ошибка в процессе ввода команд вся транзакция не будет выполнена:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET obj1 value1
QUEUED
127.0.0.1:6379> SET obj2 value2
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
127.0.0.1:6379> GET obj1
"value1"
Механиз подписок PUS-SUB
Одно из основных преимуществ Redis от других хранилищ заключается в том, что в Redis есть механизм подписок. То есть Redis можно использовать как сервер сообщений.
Одни клиенты подписываются на определенные каналы используя команду:
SUBSCRIBE имя_канала
Другие клиенты могут отправлять сообщения в этот канал используя команду:
PUBLISH имя_канала значение
Допустим один клиент подписывается на канал:
SUBSCRIBE channel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel"
3) (integer) 1
Другой клиент что-то отправляет в этот канал:
PUBLISH channel "hello world"
(integer) 1
И в этот момент первый клиент получит это сообщение:
SUBSCRIBE channel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel"
3) (integer) 1
1) "message"
2) "channel"
3) "hello world"