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

Redis – это гибкое открытое хранилище данных типа «ключ-значение». Следуя принципам других баз данных NoSQL (таких как Cassandra, CouchDB и MongoDB), Redis позволяет пользователям хранить большие объёмы данных без ограничений, присущих реляционным базам данных. Также Redis можно использовать в качестве постоянного хранилища кэша.

Требования

Для начала нужно обновить пакеты системы:

sudo apt-get update

Для выполнения руководства понадобится пакет build essential, содержащий инструменты для сборки пакетов:

sudo apt-get install build-essential

Также нужно загрузить tcl:

sudo apt-get install tcl8.5

Установка Redis

Загрузите архив с сайта проекта, Redis.io.

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

Распакуйте архив:

tar xzf redis-stable.tar.gz
cd redis-stable

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

make

Затем выполните тестирование:

make test

Чтобы выполнить общесистемную установку Redis, запустите:

sudo make install

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

cd utils

Запустите скрипт установки (Ubuntu/Debian):

sudo ./install_server.sh

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

Чтобы остановить или запустить сервер, используйте следующие команды:

sudo service redis_6379 start
sudo service redis_6379 stop

Примечание: 6379 – порт по умолчанию; если во время установки вы изменили стандартный порт, укажите в команде новый номер порта.

Чтобы получить доступ к БД redis, введите:

redis-cli

Теперь хранилище Redis установлено и запущено. Командная строка Redis имеет такой вид:

redis 127.0.0.1:6379>

Чтобы настроить автозапуск Redis, введите:

sudo update-rc.d redis_6379 defaults

Операции Redis

Простая команда для добавления данных в строку (string – самый распространённый тип данных Redis) выглядит так:

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

В данном случае после команды SET идёт ключ (users:GeorgeWashington), а потом значение (собственно строка).

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

Чтобы извлечь сведения о новой строке, используйте GET:

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

Диапазоны

При извлечении данных можно указывать диапазон при помощи двух параметров: первого и последнего элемента диапазона; как правило, в качестве первого элемента используется 0. Если последним элементом является -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"

Срок хранения данных

Redis позволяет устанавливать сроки хранения данных.

Интервалы времени можно указывать в секундах или в unix timestamp. Для управления сроками хранения данных используются команды:

  • EXPIRE (устанавливает период хранения ключа);
  • TTL (отображает оставшееся время).

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

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

> GET classified:information
(nil)

Инкремент стоковых данных

Redis предоставляет функцию инкремента строк данных. Для целостности данных во время инкремента доступ к данным блокируется.

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

Транзакции

Redis поддерживает транзакции согласно двум принципам:

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

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

Если по какой-либо причине возникает сбой сервера, прерывающий транзакцию, Redis заблокирует процесс; все изменения нужно будет отменить при помощи команды edis-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)
  • Хеш (Hash)

Строки

Строки – это базовый тип данных Redis. Общие команды для строк:

  • SET: задаёт значение ключа.
  • GET: извлекает значение ключа.
  • DEL: удаляет ключ и его значение.
  • INCR: выполняет автоматический инкремент ключа.
  • INCRBY: выполняет инкремент ключа на указанную величину.
  • EXPIRE: срок хранения ключа (в секундах).

Строки используются для хранения отсортированных по ключу данных.

Например:

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

Множества

Множества – это, по сути, скомбинированные строки без сортировки.

Общие команды:

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

Множества полезны в разных ситуациях. Поскольку каждое значение множества является индивидуальным, перед добавлением не нужно выполнять проверку. Команда SADD выполняет такую проверку автоматически.

> 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-адресов или извлечении элементов при помощи команды SRANDMEMBER.

Множества с сортировкой

Множества с сортировкой – это наборы строк, связанных с числом и отсортированных по увеличению значения этого числа.

Этот тип данных очень производителен при работе с диапазонами.

Общие команды:

  • ZADD: добавляет значение в множество с сортировкой.
  • 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"

Списки

Списки – это наборы отсортированных данных. элементы можно добавлять как в начало, так и в конец списка (даже если в списке более десяти миллионов записей).

Общие команды:

  • 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"

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

Хэш

Хэш в 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"

Tags: ,

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