Установка и использование Redis

visibility 121
04 Янв 2023г. в 09:11

Redis — нереляционная база данных типа «ключ-значение» с открытым исходным кодом. Redis позволяет хранить большие объемы информации без каких-либо ограничений и иметь быстрый доступ ней. В этой статье мы рассмотрим процесс установки и основы работы с Redis.


Установка
Прежде чем приступить к установке самого Redis, надо установить несколько зависимостей, которые сделают установку проще.

Начнем с обновления APT пакетов:

1
sudo apt-get update
Далее, установим пакет build essential:

1
sudo apt-get install build-essential
И, наконец, установим tlc:

1
sudo apt-get install tcl8.5
Установка Redis
Когда все зависимости установлены, можно перейти к установке redis.

Загрузим архив с официального сайта, последняя версия — 2.8.17:

1
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
Распакуем архив и переместимся в созданную папку:

1
2
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
Запустим команду make:

1
make
Рекомендуют так же запустить make test:

1
make test
Для завершения установки запустим команду:

1
sudo make install
После установки мы получили доступ к скрипту, который поможет настроить redis и запустить его в фоновом режиме.

Для доступа к скрипту, перейдем в папку utils:

1
cd utils
Запустим скрипт из этой директории:

1
sudo ./install_server.sh
По мере выполнения скрипта вам будут предлагать установить некоторые параметры, для установки стандартных значений просто нажимайте enter. После выполнения скрипта redis будет запущен в фоновом режиме.

Остановить и запустить redis снова можно с помощью команд (номер порта — тот, который вы указали при установке, по-умолчанию — 6379):

1
2
sudo service redis_6379 start
sudo service redis_6379 stop
Для доступа к базе redis используется команда:

1
redis-cli
Теперь redis установлен и запущен. Командная строка будет выглядеть так:

1
redis 127.0.0.1:6379>
Для автоматического запуска redis при старте системы:

1
sudo update-rc.d redis_6379 defaults
Команды Redis
Простая команда для добавления строки (основной тип в redis) выглядит так:

1
2
> SET users:JohnDoe "job: President, born:1732, dislikes: cherry trees"
OK
После команды SET указывается ключ (users:JohnDoe), после указывается значение (сама строка).

Двоеточия никак не влияют на работу Redis, но могут быть полезны для создания префиксов и удобной работы с ключами.

Достать созданную строку из базы можно командой «GET»:

1
2
GET users:JohnDoe
"job: President, born:1732, dislikes: cherry trees"
Ranges
Помимо обычной выборки мы можем получать диапазоны значений. У команды 2 аргумента: первый и последний элементы. Если последний параметр равен -1, будут возвращены все элементы списка. Примеры команд для списков:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> LRANGE ROYGBV 0 3
1) "red"
2) "orange"
3) "yellow"
4) "green"
> LRANGE ROYGBV 0 -1
1) "red"
2) "orange"
3) "yellow"
4) "green"
5) "blue"
6) "violet"
> LRANGE ROYGBV 3 -1
1) "green"
2) "blue"
3) "violet"
Expiration
В Redis можно указать время жизни данных. По-умолчанию данные хранятся вечно.

Управлять временем жизни данных помогают две команды: EXPIRE — устанавливает время жизни значения и TTL — показывает время, которое осталось до окончания хранения.

1
2
3
4
5
6
> SET classified:information "Secret Stuff"
OK
> EXPIRE classified:information 45
(integer) 1
> TTL classified:information
(integer) 31
При попытке получить данные после того, как время их жизни закончилось, вернется «nil»:

1
2
> GET classified:information
(nil)
Incrementing
Redis позволяет атомарно инкрементировать значения в базе. Если ваш процесс собирается изменить значение, то никакая другая команда не сможет изменить это значение в это же время, таким образом сохраняется целостность данных в базе.

1
2
3
4
5
6
> SET population 6
OK
> INCRBY population 10
(integer) 16
> INCR population
(integer) 17
Transactions
В Redis также есть транзакции. Транзакции должны удовлетворять двум требованиям:

Команды должны выполняться последовательно. Их выполнение не должно быть прервано другими процессами.
Транзакция должна быть выполнена полностью или не выполниться вообще.
Транзакция начинается с команды MULTI и запускается командой EXEC.

Если по каким-то причинам процесс выполнения будет нарушен, транзакция будет отменена и redis невозможно будет перезапустить, пока не выполнится команда redis-check-aof и изменения не будут отменены.

1
2
3
4
5
6
7
8
9
10
11
12
13
> MULTI
OK
> SET population 6
QUEUED
> INCRBY population 10
QUEUED
> INCR population
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) (integer) 16
3) (integer) 1
4) (integer) 17
Типы данных в Redis
В Redis есть пять типов данных: Strings, Sets, Sorted Sets, Lists, Hashes.

Strings
Основной тип данных в редис — strings. Команды для работы со строками:

SET: устанавливает пару ключ-значение.
GET: возвращает значение для ключа.
DEL: удаляет ключ и значение.
INCR: увеличивает значение.
INCRBY: увеличивает значение на указанную величину.
EXPIRE: устанавливает время жизни ключа (в секундах).
Пример:

1
2
3
4
> SET newkey "the redis string begins"
OK
> GET newkey
"the redis string begins"
Sets
Если вы хотите хранить набор строк, можно использовать тип данных sets — набор неупорядоченных строк.

Команды для работы с наборами:

SADD: добавить один или несколько значений.
SMEMBERS: возвращает все элементы набора.
SINTER: пересечение двух наборов.
SISMEMBER: проверяет вхождение значения в наборе.
SRANDMEMBER: возвращает случайный элемент набора.
Наборы могут быть полезны в различных ситуациях. Благодаря тому, что наборы хранят уникальные значения, при добавлении новых значений нет необходимости проверять существование этого значения в наборе.

1
2
3
4
5
6
7
8
9
10
11
12
> SADD colors red
(integer) 1
redis 127.0.0.1:6379> SADD colors orange
(integer) 1
redis 127.0.0.1:6379> SADD colors yellow
(integer) 1
redis 127.0.0.1:6379> SADD colors orange
(integer) 0
redis 127.0.0.1:6379> SMEMBERS colors
1) "red"
2) "yellow"
3) "orange"
Наборы могут быть полезны при, хранении уникальных IP адресов посетителей.

Sorted Sets
По названию можно понять какую задачу выполняют упорядоченные наборы: это набор строк с соответствующими им числами (float) и упорядоченными по возрастанию этих чисел.

Команды для работы с упорядоченными списками:

ZADD: добавляет значение в список
ZRANGE: возвращает элементы списка в порядке возрастания.
ZREVRANGE: возвращает элементы списка в порядке убывания.
ZREM: удаляет значение из списка.
Создадим упорядоченный список самых маленьких стран с их площадями:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> zadd countries 9 Tuvalu
(integer) 1
> zadd countries 62 Liechtenstein
(integer) 1
> zadd countries .7 Monaco
(integer) 1
> zadd countries .2 VaticanCity
(integer) 1
> zadd countries 107 Seychelles
(integer) 1
redis 127.0.0.1:6379> zrange countries 0 -1
1) "VaticanCity"
2) "Monaco"
3) "Tuvalu"
4) "Liechtenstein"
5) "Seychelles"
Lists
Списки в Redis — коллекция значений, упорядоченных в порядке их добавления. Этот тип данных противоположен наборам (sets), которые не упорядочены. Вы можете добавлять значения в начало или конец списка (даже если там хранится 10 миллионов значений) с очень высокой скоростью.

Команды для работы со списками:

LPUSH: добавить значение в начало списка.
RPUSH: добавить в конец списка.
LPOP: возвращает и удаляет первое значение в списке.
RPOP: возвращает и удаляет последнее значение в списке.
LREM: удаляет значения из списка.
LRANGE: возвращает диапазон значений из списка.
LTRIM: изменяет список, оставляя только указанный диапазон.
Пример:

1
2
3
4
5
6
7
8
9
10
> rpush lunch.provider alice
(integer) 1
> rpush lunch.provider bob
(integer) 2
> rpush lunch.provider carol
(integer) 3
> rpush lunch.provider don
(integer) 4
> rpush lunch.provider emily
(integer) 5
Чтобы добавить в начало списка:

1
2
lpush lunch.provider zoe
(integer) 6
Команда LRANGE покажет весь список:

1
2
3
4
5
6
7
lrange lunch.provider 0 -1
1) "zoe"
2) "alice"
3) "bob"
4) "carol"
5) "don"
6) "emily"
Списки удобно использовать для создания хронологии каких-либо событий.

Hashes
Хэши в Redis полезны для хранения объектов с множеством полей. Этот тип предназначен для хранения большого количества полей в маленьком объеме. Хэш может хранить более 4 млрд пар поле-значение.

Команды:

HMSET: устанавливает значение нескольких полей.
HSET: устанавливает значение поля.
HGET: возвращает значение поля.
HMGET: возвращает значения указанных полей.
HGETALL: возвращает все значения хэша.
Хэш можно использовать для хранения данных пользователей.

1
2
3
4
5
6
7
8
9
> hmset user:1 username jsmith password 4bAc0s email [email protected]
OK
> hgetall user:1
1) "username"
2) "jsmith"
3) "password"
4) "4bAc0s"
5) "email"
6) "[email protected]"
Если вам нужна отдельная информация, HMGET возвращает значения отдельных полей.

1
2
3
> hmget user:1 username email
1) "jsmith"
"[email protected]"
Заключение
С момента своего появления редис стал очень популярным благодаря своей производительности. К тому же Redis можно использовать с большинством современных языков программирования.



Оставить комментарий

Ваше имя::


Комментарий::




Ничего не найдено