Учебник Laravel (5.7) Redis
Вступление
Redis - это расширенное хранилище значений ключей с открытым исходным кодом. Его часто называют сервером структуры данных, поскольку ключи могут содержать строки, хэши, списки, наборы и отсортированные наборы.
Перед использованием Redis с Laravel вам необходимо установить пакет predis / predis через Composer:
композитор требует predis / predis
Кроме того, вы можете установить PHP-расширение PhpRedis через PECL. Расширение сложнее в установке, но может дать лучшую производительность для приложений, которые интенсивно используют Redis.
конфигурация
Конфигурация Redis для вашего приложения находится в файле конфигурации config / database.php. В этом файле вы увидите массив redis, содержащий серверы Redis, используемые вашим приложением:
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
],
],
Подключение к Redis
Сначала нам понадобится автозагрузчик Redis и зарегистрируем его. Затем мы завернем клиента в блок try catch. Параметр подключения для подключения к Redis на локальном сервере отличается от подключения к удаленному серверу.
<?php
require "predis/autoload.php";
PredisAutoloader::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 Datatypes
Redis поддерживает ряд типов данных, и вы можете спросить, какое отношение имеет хранилище ключей NOSQL к типам данных? Ну, эти типы данных помогают разработчикам хранить данные осмысленным образом и могут ускорить поиск данных. Вот некоторые типы данных, поддерживаемые Redis:
- Строка: аналогично строкам в PHP.
- Список: похоже на одномерный массив в PHP. Вы можете перемещать, перемещать, сдвигать и отменять смещение элементов, которые расположены по порядку, или вставлять FIFO (сначала вход, затем выход).
- Хэш: карты между строковыми полями и строковыми значениями. Они являются идеальным типом данных для представления объектов (например: пользователь с несколькими полями, такими как имя, фамилия и т. Д.).
- Set: аналогично списку, за исключением того, что он не имеет порядка и каждый элемент может появляться только один раз.
- Сортированный набор: аналогично наборам Redis с уникальной функцией значений, сохраненных в наборе. Разница в том, что каждый член отсортированного набора связан с оценкой, используемой для упорядочения набора от наименьшей оценки к наибольшей.
Другие - это растровые изображения и гиперлоглоги, но они не будут обсуждаться в этой статье, так как они довольно плотные.
Добытчики и сеттеры
В Redis наиболее важными командами являются SET, GET и EXISTS. Эти команды используются для хранения, проверки и извлечения данных с сервера Redis. Как и команды, класс Predis можно использовать для выполнения операций Redis с помощью методов с тем же именем, что и команды. Например:
<?php
// sets message to contian "Hello world"
$redis->set(';message';, ';Hello world';);
// gets the value of message
$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
Мы также можем увеличить значения ключа счетчика на большее целочисленное значение или уменьшить значение ключа счетчика с помощью команд INCRBY и DECRBY.
<?php
$redis->set("counter", 0);
$redis->incrby("counter", 15); // 15
$redis->incrby("counter", 5); // 20
$redis->decrby("counter", 10); // 10
Работа со списками
Существует несколько основных команд Redis для работы со списками:
- 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]
Работа с хэшами
Хэш в Redis - это карта между одним строковым полем и строковыми значениями, как отношение один ко многим. Команды, связанные с хэшами в Redis:
- 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); // returns all key-value that belongs to the hash
/*
[
'age' => 44,
'country' => 'finland',
'occupation' => 'software engineer',
'reknown' => 'linux kernel',
]
*/
Работа с наборами
Список команд, связанных с наборами, включает в себя: - SADD: добавляет N ключ к значению N - SREM: удаляет N количество значений из ключа - SISMEMBER: если значение существует - SMEMBERS: списки значений в наборе.
<?php
$key ="countries";
$redis->sadd($key, ';china';);
$redis->sadd($key, ['england', 'france', 'germany']);
$redis->sadd($key, 'china'); // this entry is ignored
$redis->srem($key, ['england', 'china']);
$redis->sismember($key, 'england'); // false
$redis->smembers($key); // ['france', 'germany']
Установить срок действия и постоянство
Поскольку Redis - это хранилище данных в памяти, вы, вероятно, не будете хранить данные вечно. Таким образом, это приводит нас к EXPIRE, EXPIREAT, TTL, PERSIST - EXPIRE: задает время истечения в секундах для ключа, после которого он удаляется - EXPIREAT: задает время истечения, используя метки времени unix для ключа, после которого он удаляется. - TTL: получает оставшееся время, оставшееся до истечения срока действия ключа. - PERSIST: делает ключ вечным, удаляя таймер истечения срока действия ключа.
$key ="expire in 1 hour";
$redis->expire($key, 3600); // expires in 1 hour
$redis->expireat($key, time() + 3600); // expires in 1 hour
sleep(600); // don't try this, just an illustration for time spent
$redis->ttl($key); // 3000, ergo expires in 50 minutes
$redis->persist($key); // this will never expire.
Предыдущий: Учебник Laravel (5.7) Пагинация
Далее: Учебник Laravel (5.7) Посев
Новый контент: Composer: менеджер зависимостей для PHP , R программирования