MyTetra Share
Делитесь знаниями!
Стартуем работу с Redis и PHP
Время создания: 13.07.2018 15:30
Текстовые метки: php redis cache
Раздел: PHP
Запись: Velonski/mytetra-database/master/base/1527484007jf6mb8sht2/text.html на raw.githubusercontent.com

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”.

Есть ещё и другие типы данных, такие как битмапы и иероглифы, но их мы рассматривать не будем.2


Геттеры и сеттеры

При работе с 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

 
MyTetra Share v.0.59
Яндекс индекс цитирования