Стартуем работу с 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, PERSISTEXPIRE: время истечения срока хранения в секундах, после чего элемент будет удалён – 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
Просмотров: 66044
Правила перепечатки


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 сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

^ Наверх ^