Redis
Le composant redis de webman utilise par défaut illuminate/redis, qui est la bibliothèque redis de Laravel, et est utilisé de la même manière que Laravel.
Avant d'utiliser illuminate/redis
, vous devez d'abord installer l'extension redis pour php-cli
.
Remarque
Utilisez la commandephp -m | grep redis
pour vérifier si l'extension redis est installée pourphp-cli
. Notez que même si vous avez installé l'extension redis pourphp-fpm
, cela ne signifie pas que vous pouvez l'utiliser dansphp-cli
, carphp-cli
etphp-fpm
sont des applications différentes et peuvent utiliser des fichiers de configurationphp.ini
différents. Utilisez la commandephp --ini
pour vérifier quel fichier de configurationphp.ini
est utilisé par votrephp-cli
.
Installation
composer require -W illuminate/redis illuminate/events
Après l'installation, vous devez redémarrer (reload ne fonctionnera pas).
Configuration
Le fichier de configuration redis se trouve dans config/redis.php
.
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
]
];
Exemple
<?php
namespace app\controller;
use support\Request;
use support\Redis;
class UserController
{
public function db(Request $request)
{
$key = 'test_key';
Redis::set($key, rand());
return response(Redis::get($key));
}
}
Interface Redis
Redis::append($key, $value)
Redis::bitCount($key)
Redis::decr($key, $value)
Redis::decrBy($key, $value)
Redis::get($key)
Redis::getBit($key, $offset)
Redis::getRange($key, $start, $end)
Redis::getSet($key, $value)
Redis::incr($key, $value)
Redis::incrBy($key, $value)
Redis::incrByFloat($key, $value)
Redis::mGet(array $keys)
Redis::getMultiple(array $keys)
Redis::mSet($pairs)
Redis::mSetNx($pairs)
Redis::set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null)
Redis::setBit($key, $offset, $value)
Redis::setEx($key, $ttl, $value)
Redis::pSetEx($key, $ttl, $value)
Redis::setNx($key, $value)
Redis::setRange($key, $offset, $value)
Redis::strLen($key)
Redis::del(...$keys)
Redis::exists(...$keys)
Redis::expire($key, $ttl)
Redis::expireAt($key, $timestamp)
Redis::select($dbIndex)
Équivalent à
$redis = Redis::connection('default');
$redis->append($key, $value)
$redis->bitCount($key)
$redis->decr($key, $value)
$redis->decrBy($key, $value)
$redis->get($key)
$redis->getBit($key, $offset)
...
Remarque
Utilisez l'interfaceRedis::select($db)
avec précaution. Comme webman est un framework résident en mémoire, si une requête utiliseRedis::select($db)
pour changer de base de données, cela affectera les requêtes suivantes. Pour plusieurs bases de données, il est recommandé de configurer différentes connexions Redis pour chaque$db
.
Utiliser plusieurs connexions Redis
Par exemple, dans le fichier de configuration config/redis.php
:
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
]
Par défaut, la connexion utilisée est celle configurée sous default
, vous pouvez utiliser la méthode Redis::connection()
pour choisir quelle connexion Redis utiliser.
$redis = Redis::connection('cache');
$redis->get('test_key');
Configuration de cluster
Si votre application utilise un cluster de serveurs Redis, vous devez définir ces clusters dans le fichier de configuration Redis, sous la clé clusters
:
return [
'clusters' => [
'default' => [
[
'host' => 'localhost',
'password' => null,
'port' => 6379,
'database' => 0,
],
],
],
];
Par défaut, le cluster peut être mis en œuvre pour le fractionnement du client sur les nœuds, ce qui vous permet de mettre en place un pool de nœuds et de créer une très grande quantité de mémoire disponible. Gardez à l'esprit que le partage du client ne gère pas les échecs, il est donc principalement utilisé pour obtenir des données mises en cache à partir d'une autre base de données principale. Si vous souhaitez utiliser le cluster Redis natif, vous devez spécifier dans la section options
du fichier de configuration comme suit:
return[
'options' => [
'cluster' => 'redis',
],
'clusters' => [
// ...
],
];
Commandes en pipeline
Lorsque vous avez besoin d'envoyer de nombreuses commandes au serveur dans une seule opération, il est recommandé d'utiliser des commandes en pipeline. La méthode pipeline accepte une fonction de rappel pour une instance Redis. Vous pouvez envoyer toutes les commandes à l'instance Redis et elles seront toutes exécutées dans une seule opération :
Redis::pipeline(function ($pipe) {
for ($i = 0; $i < 1000; $i++) {
$pipe->set("key:$i", $i);
}
});