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

15-03-27 Разное Linux, Redis 2

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

Установка

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

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

sudo apt-get update

Далее, установим пакет build essential:

sudo apt-get install build-essential

И, наконец, установим tlc:

sudo apt-get install tcl8.5

Установка Redis

Когда все зависимости установлены, можно перейти к установке redis.

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

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

Распакуем архив и переместимся в созданную папку:

tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17

Запустим команду make:

make

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

make test

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

sudo make install

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

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

cd utils

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

sudo ./install_server.sh

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

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

sudo service redis_6379 start
sudo service redis_6379 stop

Для доступа к базе redis используется команда:

redis-cli

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

redis 127.0.0.1:6379> 

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

sudo update-rc.d redis_6379 defaults

Команды Redis

Простая команда для добавления строки (основной тип в redis) выглядит так:

> SET users:JohnDoe "job: President, born:1732, dislikes: cherry trees"
OK

После команды SET указывается ключ (users:JohnDoe), после указывается значение (сама строка).

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

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

GET users:JohnDoe
"job: President, born:1732, dislikes: cherry trees"

Ranges

Помимо обычной выборки мы можем получать диапазоны значений. У команды 2 аргумента: первый и последний элементы. Если последний параметр равен -1, будут возвращены все элементы списка. Примеры команд для списков:

> 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 — показывает время, которое осталось до окончания хранения.

> SET classified:information "Secret Stuff"
OK
> EXPIRE classified:information 45
(integer) 1
> TTL classified:information
(integer) 31

При попытке получить данные после того, как время их жизни закончилось, вернется «nil»:

> GET classified:information
(nil)

Incrementing

Redis позволяет атомарно инкрементировать значения в базе. Если ваш процесс собирается изменить значение, то никакая другая команда не сможет изменить это значение в это же время, таким образом сохраняется целостность данных в базе.

> SET population 6
OK
> INCRBY population 10
(integer) 16
> INCR population
(integer) 17

Transactions

В Redis также есть транзакции. Транзакции должны удовлетворять двум требованиям:

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

Транзакция начинается с команды MULTI и запускается командой EXEC.

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

> 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: устанавливает время жизни ключа (в секундах).

Пример:

> SET newkey "the redis string begins"
OK
> GET newkey
"the redis string begins"

Sets

Если вы хотите хранить набор строк, можно использовать тип данных sets — набор неупорядоченных строк.

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

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

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

> 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: удаляет значение из списка.

Создадим упорядоченный список самых маленьких стран с их площадями:

> 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: изменяет список, оставляя только указанный диапазон.

Пример:

> 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

Чтобы добавить в начало списка:

lpush lunch.provider zoe
(integer) 6

Команда LRANGE покажет весь список:

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: возвращает все значения хэша.

Хэш можно использовать для хранения данных пользователей.

> hmset user:1 username jsmith password 4bAc0s email jsmith@gmail.com
OK
> hgetall user:1
1) "username"
2) "jsmith"
3) "password"
4) "4bAc0s"
5) "email"
6) "jsmith@gmail.com"

Если вам нужна отдельная информация, HMGET возвращает значения отдельных полей.

> hmget user:1 username email
1) "jsmith"
"jsmith@gmail.com"

Заключение

С момента своего появления редис стал очень популярным благодаря своей производительности. К тому же Redis можно использовать с большинством современных языков программирования.

На этом всё. 🙂

Хочешь получать статьи на почту?

Подпишись на обновления!
* Ваш email не будет разглашен/продан. Вы сможете отписаться в любое время.

2 Комментария

  1. hurt says:

    доброго времени суток, подскажите, а можно ли redis использовать/настроить, как обычную базу данных без постоянного хранения данных в оперативке, т.е. данные хранятся на жест диске, запросы идут как к обычно бд?

  2. Дмитрий says:

    Лучшая статья в топ 10 гугл. Всё завелось с первого раза. Спасибо автору!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *