Стартуем работу с Redis и PHP
Rdis - сетевое журналируемое хранилище данных типа “ключ — значение” с открытым исходным кодом. Как правило, данное программное средство используется как нереляционная высокопроизводительная СУБД. В ней можно хранить строки, хэши, списки и многое другое.
Об этой статье
Данная статья не является руководством по работе с Redis (для этого можете посетить официальный сайт). В данной статье мы рассмотрим как связать Redis и PHP.
Установка Redis
Процесс установки абсолютно не вызывает трудностей. Просто следуйте инструкциям, изложенным на официальном сайте.
Установка Redis на Linux
Для установке Redis на Linux вам потребуется TCL. Запустите команду:
$ sudo apt-get install tcl
Для установки Redis:
$ wget http://download.redis.io/releases/redis-2.8.19.tar.gz
$ tar xzf redis-2.8.19.tar.gz
$ cd redis-2.8.19
$ make
Заметка: значение 2.8.19 замените на номер текущей стабильной версии.
Все бинарные файлы будут сохранены в каталоге SRC. Для запуска сервера:
$ src/redis-server
Установка Redis на Windows
Для установки Redis на Windows просто скачайте последний пакет и следуйте инструкциям.
Установите Predis - клиент для PHP. Для этого скопируйте его с GitHub в папку с проектом:
$ git clone git://github.com/nrk/predis.git
Подключение к Redis
Для начала подключаем автозагрузчик Redis. Затем помещаем код в блок try/catch. Подключение к локальному Redis выглядит несколько иначе, чем к удалённому.
<?php require "predis/autoload.php"; Predis\Autoloader::register(); try { $redis = new PredisClient(); // This connection is for a remote server /* $redis = new PredisClient(array( "scheme" => "tcp", "host" => "153.202.124.2", "port" => 6379 )); */ } catch (Exception $e) { die($e->getMessage()); }
Теперь, когда подключение произошло, можем приступать к работе с Redis.
Типы данных в Redis
Redis поддерживает целый ряд типов данных. Вы можете спросить какое это имеет значение для NOSQL базы данных? Это позволяет хранить данные в том виде, в котором это целесообразней и в некоторых случаях влияет на скорость доступа к данным.
- Строка: обычные наборы символов.
- Список: линейный массив.
- Хэш-таблицы: ассоциативные массивы.
- Множества: набор уникальных значений.
- Упорядоченные множества: множества упорядоченные по параметру “score”.
Есть ещё и другие типы данных, такие как битмапы и иероглифы, но их мы рассматривать не будем.
Геттеры и сеттеры
При работе с Redis нужно знать три основные команды: SET
, GET
и EXISTS
. Они используются чтобы проверить наличие/отправить и получить данные от Redis. К примеру:
<?php // помещение строки "Hello world" $redis->set(';message';, ';Hello world';); // получаем строу по ключу $value = $redis->get('message'); // Hello world print($value); echo ($redis->exists('message')) ? "Oui" : "please populate the message key";
Инкремент и декремент
INCR
и DECR
- это команды, использующиеся для увеличения и уменьшения значения.
<?php $redis->set("counter", 0); $redis->incr("counter"); // 1 $redis->incr("counter"); // 2 $redis->decr("counter"); // 1
Для увеличения/уменьшения более чем на 1, можете воспользоваться командами INCRBY
и DECRBY
.
<?php $redis->set("counter", 0); $redis->incrby("counter", 15); // 15 $redis->incrby("counter", 5); // 20 $redis->decrby("counter", 10); // 10
Работа с списками
Для работы со списками вам понадобятся команды:
- LPUSH: помещает элемент в начало списка
- RPUSH: помещает элемент в конец списка
- LPOP: извлекает первый элемент из списка
- RPOP: извлекает последний элемент из списка
- LLEN: получение размерности списка
- LRANGE: получение нескольких элементов списка
Просто использование списков:
<?php $redis->rpush("languages", "french"); // [french] $redis->rpush("languages", "arabic"); // [french, arabic] $redis->lpush("languages", "english"); // [english, french, arabic] $redis->lpush("languages", "swedish"); // [swedish, english, french, arabic] $redis->lpop("languages"); // [english, french, arabic] $redis->rpop("languages"); // [english, french] $redis->llen("languages"); // 2 $redis->lrange("languages", 0, -1); // returns all elements $redis->lrange("languages", 0, 1); // [english, french]
Работа с хэш-таблицами
Как уже упоминалось, данный тип можно сопоставить с ассоциативными таблицами. Команды:
- HSET: установка элемента ключ-значение
- HGET: извлечение элемента ключ-значение
- HGETALL: извлечение всех элементов
- HMSET: установка нескольких элементов ключ-значение
- HDEL: Удаление элемента по ключу
- HINCRBY: увеличить элемент ключ-значение.
<?php $key = ';linus torvalds';; $redis->hset($key, ';age';, 44); $redis->hset($key, ';country';, ';finland';); $redis->hset($key, 'occupation', 'software engineer'); $redis->hset($key, 'reknown', 'linux kernel'); $redis->hset($key, 'to delete', 'i will be deleted'); $redis->get($key, 'age'); // 44 $redis->get($key, 'country')); // Finland $redis->del($key, 'to delete'); $redis->hincrby($key, 'age', 20); // 64 $redis->hmset($key, [ 'age' => 44, 'country' => 'finland', 'occupation' => 'software engineer', 'reknown' => 'linux kernel', ]); // finally $data = $redis->hgetall($key); print_r($data); // возвращает все значения, которые принадлежат хэшу /* [ 'age' => 44, 'country' => 'finland', 'occupation' => 'software engineer', 'reknown' => 'linux kernel', ] */
Работа с множествами
Список команд: – SADD
: добавление числа N ключу – SREM
: удаление числа N ключу – SISMEMBER
: проверка существование значения – SMEMBERS
: набор всех значений.
<?php $key = "countries"; $redis->sadd($key, ';china';); $redis->sadd($key, ['england', 'france', 'germany']); $redis->sadd($key, 'china'); // игнорируется $redis->srem($key, ['england', 'china']); $redis->sismember($key, 'england'); // false $redis->smembers($key); // ['france', 'germany']
Работа с упорядоченными множествами
Поскольку Redis хранит данные в памяти, то они не могут располагаться там вечно. Поэтому нам понадобится возможность установить EXPIRE
, EXPIREAT
, TTL
, PERSIST
– EXPIRE
: время истечения срока хранения в секундах, после чего элемент будет удалён – EXPIREAT
: истечение срока unix timestamps – TTL
: получить значение оставшегося времени – PERSIST
: сброс истечения срока.
$key = "expire in 1 hour"; $redis->expire($key, 3600); // истечёт через 1 час $redis->expireat($key, time() + 3600); // истечёт через 1 час sleep(600); // имитация пройденного времени $redis->ttl($key); // 3000, истечёт через 50 минут $redis->persist($key); // никогда не истечёт.
Итог
Мы рассмотрели лишь самые необходимые команды. Все остальные можно найти на сайте Redis.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://scotch.io/tutorials/getting-started-with-redis-in-php
Перевел: Станислав Протасевич
Урок создан: 24 Апреля 2015
Просмотров: 76174
Правила перепечатки
5 последних уроков рубрики "PHP"
-
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.
-
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
-
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
-
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
-
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.