Установка и использование Redis
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 также есть транзакции. Транзакции должны удовлетворять двум требованиям:
- Команды должны выполняться последовательно. Их выполнение не должно быть прервано другими процессами.
- Транзакция должна быть выполнена полностью или не выполниться вообще.
Транзакция начинается с команды 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 можно использовать с большинством современных языков программирования.
На этом всё. 🙂
доброго времени суток, подскажите, а можно ли redis использовать/настроить, как обычную базу данных без постоянного хранения данных в оперативке, т.е. данные хранятся на жест диске, запросы идут как к обычно бд?
Лучшая статья в топ 10 гугл. Всё завелось с первого раза. Спасибо автору!