Урок по Redis
Урок по Redis
Ранее рассматривалась связка на FreeBSD:
http://snakeproject.ru/rubric/article.php?art=freebsd_redis_09.2018
Redis - key-value хранилище значений
Пример установки на Centos 7:
yum install redis.x86_64
Включение в автозагрузку:
systemctl enable redis.service
Старт сервиса:
systemctl start redis.service
Проверка:
systemctl status redis.service
Входим в командную строку:
redis-cli
127.0.0.1:6379>
1. Установка строкового значения ключу "foo", получение значения ключа:
127.0.0.1:6379> EXISTS foo
(integer) 0
127.0.0.1:6379> SET foo "Hello World"
OK
127.0.0.1:6379> GET foo
"Hello World"
127.0.0.1:6379> EXISTS foo
(integer) 1
2. Установкой периода жизни значения ключа в секундах:
127.0.0.1:6379> SET foo "Hello World" EX 10
OK
127.0.0.1:6379> GET foo
"Hello World"
127.0.0.1:6379> GET foo
(nil)
3. Добавление к значению ключа:
127.0.0.1:6379> SET foo "Hello"
OK
127.0.0.1:6379> APPEND foo " World"
(integer) 11
127.0.0.1:6379> GET foo
"Hello World"
4. Установка нового значения и возвращение старого значения:
127.0.0.1:6379> SET foo "Hello"
OK
127.0.0.1:6379> GETSET foo "World"
"Hello"
127.0.0.1:6379> GET foo
"World"
5. Операции инкремента и декремента на единицу:
127.0.0.1:6379> SET foo 3
OK
127.0.0.1:6379> INCR foo
(integer) 4
127.0.0.1:6379> GET foo
"4"
127.0.0.1:6379> DECR foo
(integer) 3
127.0.0.1:6379> GET foo
"3"
6. Работа с множествами (неупорядоченные наборы значений):
127.0.0.1:6379> SADD fooset "Hello"
(integer) 1
127.0.0.1:6379> SADD fooset "World"
(integer) 1
127.0.0.1:6379> SMEMBERS fooset
1) "World"
2) "Hello"
127.0.0.1:6379> help SCARD
SCARD key
summary: Get the number of members in a set
since: 1.0.0
group: set
127.0.0.1:6379> SCARD fooset
(integer) 2
7. Работа с упорядоченными множествами (задаем порядок хранения):
127.0.0.1:6379> ZADD foosetsort 2 "one"
(integer) 1
127.0.0.1:6379> ZADD foosetsort 1 "two"
(integer) 1
127.0.0.1:6379> ZRANGE foosetsort 0 -1 WITHSCORES
1) "two"
2) "1"
3) "one"
4) "2"
8. Работа с хэш-таблицами(объекты со структорой из полей, поля имеют имена и значения):
127.0.0.1:6379> HSET fooobj fooset 11
(integer) 1
127.0.0.1:6379> HGET fooobj fooset
"11"
127.0.0.1:6379> HSET fooobj fooset2 22
(integer) 1
127.0.0.1:6379> help HVALS
HVALS key
summary: Get all the values in a hash
since: 2.0.0
group: hash
127.0.0.1:6379> HVALS fooobj
1) "11"
2) "22"
127.0.0.1:6379> help HGETALL
HGETALL key
summary: Get all the fields and values in a hash
since: 2.0.0
group: hash
127.0.0.1:6379> HGETALL fooobj
1) "fooset"
2) "11"
3) "fooset2"
4) "22"
9. Работа с cписками (последовательности значений, упорядоченне по порядку создания):
127.0.0.1:6379> LPUSH foolist "one"
(integer) 1
127.0.0.1:6379> LPUSH foolist "two"
(integer) 2
127.0.0.1:6379> LPOP foolist
"two"
127.0.0.1:6379> LINSERT foolist BEFORE one "zero"
(integer) 2
127.0.0.1:6379> LRANGE foolist 0 -1
1) "zero"
2) "one"
127.0.0.1:6379> LPOP foolist
"zero"
127.0.0.1:6379> LPOP foolist
"one"
127.0.0.1:6379> LPOP foolist
(nil)
10. Транзакции:
Начнем транзакцию, дадим команды и зафиксируем ее:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET foo 0
OK
127.0.0.1:6379> INCR foo
QUEUED
127.0.0.1:6379> DECR foo
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (integer) 1
3) (integer) 0
Начнем транзакцию, дадим команды и прервем транзакцию:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET foo 0
OK
127.0.0.1:6379> INCR foo
QUEUED
127.0.0.1:6379> DISCARD
OK
Отката в транзакциях не существует, ошибка в командах не приведет к откату
11. Подписки иил каналы
Клиенты Redis подписываются на каналы сообщений:
Клиент 1:
Например подпишимся на канал с именем "work":
127.0.0.1:6379> SUBSCRIBE work
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "work"
3) (integer) 1
Клиент 2:
Теперь другой клиент может написать в этот канал:
127.0.0.1:6379> PUBLISH work "Hello World"
(integer) 1
Клиент 1:
Увидит:
1) "message"
2) "work"
3) "Hello World"
12. Документация
Сайт проекта:
https://redis.io
Все команды:
https://redis.io/commands
Комментарии пользователей
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!