кодесурса
«Laravel

Учебник Laravel (5.7) Redis

script1adsense2code
script1adsense3code

Вступление

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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code