Комплексные типы данных
Хеш таблицы
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"