Rédis
- PhpRedisPublier/S'abonner
-
Introduction
Redis est une base de données de stockage de paires clé-valeur avancée et open source. Puisqu'il contient String , Hash , List , Set et Ordered Set ces types de données, il est souvent appelé serveur de structure de données.
Avant d'utiliser Redis de Laravel, vous devez installer le package d'extension
predis/predis
via Composer :predis/predis
扩展包:composer require predis/predis
或者,你也可以通过 PECL 安装 PhpRedis PHP 扩展。这个扩展安装起来比较复杂,但对于大量使用 Redis 的应用程序来说可能会产生更好的性能。
配置
Laravel 应用的 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 服务器指定名称、host(主机)和 port(端口)即可。
集群配置
如果你的应用使用 Redis 服务器集群,你应该在 Redis 配置文件中使用
clusters
键来定义这些集群:'redis' => [ 'client' => 'predis', 'clusters' => [ 'default' => [ [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, ], ], ], ],
默认情况下,集群可以在节点上实现客户端分片,允许你实现节点池以及创建大量可用内存。这里要注意,客户端共享不会处理失败的情况;因此,这个功能主要适用于从另一个主数据库获取的缓存数据。如果要使用 Redis 原生集群,需要在配置文件下的
options
键中做出如下指定:'redis' => [ 'client' => 'predis', 'options' => [ 'cluster' => 'redis', ], 'clusters' => [ // ... ], ],
Predis
除了默认的
host
,port
,database
, 和password
这些服务配置选项外,Predis 还支持为每个 Redis 服务器定义其它的链接参数 connection parameters 。如果要使用这些额外的配置选项,可以将以下配置添加到 Redis 服务器的配置文件config/database.php
'default' => [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, 'read_write_timeout' => 60, ],
Ou, vous pouvez également l'installer via PECL PhpRedisExtension PHP. Cette extension est plus complexe à installer, mais peut offrir de meilleures performances pour les applications qui utilisent beaucoup Redis.
Configuration
🎜La configuration Redis de l'application Laravel est dans le fichier de configurationconfig /database.php
. Dans ce fichier, vous pouvez voir que le tableauredis
contient des informations sur le serveur Redis utilisé par l'application : 🎜'redis' => [ 'client' => 'phpredis', // 其余的Redis配置... ],
🎜La configuration du serveur par défaut devrait être suffisante pour le développement. Bien entendu, vous pouvez également modifier ce tableau à volonté en fonction de l'environnement utilisé. Spécifiez simplement le nom, l'hôte et le port de chaque serveur Redis dans le fichier de configuration. 🎜🎜Configuration du cluster
🎜Si votre application utilise un cluster de serveurs Redis, vous devez utiliser desclusters dans le code du fichier de configuration Redis > clé pour définir ces clusters : 🎜
'default' => [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, 'read_timeout' => 60, ],
🎜Par défaut, les clusters peuvent implémenter le partitionnement côté client sur les nœuds, vous permettant d'implémenter des pools de nœuds et de créer de grandes quantités de mémoire libre. Notez ici que le partage côté client ne gère pas les cas d'échec ; par conséquent, cette fonctionnalité est principalement adaptée aux données mises en cache obtenues à partir d'une autre base de données principale. Si vous souhaitez utiliser le cluster natif Redis, vous devez spécifier les éléments suivants dans la cléoptions
sous le fichier de configuration : 🎜<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Redis; class UserController extends Controller{ /** * 显示给定用户的配置文件。 * * @param int $id * @return Response */ public function showProfile($id) { $user = Redis::get('user:profile:'.$id); return view('user.profile', ['user' => $user]); } }
🎜🎜🎜🎜Predis
🎜En plus de l'hôte
, duport
et de labase de données
etmot de passe
En plus de ces options de configuration de service, Predis prend également en charge la définition d'autres paramètres de connexion pour chaque serveur Redisparamètres de connexion 🎜 . Si vous souhaitez utiliser ces options de configuration supplémentaires, vous pouvez ajouter la configuration suivante au fichier de configuration du serveur Redisconfig/database.php
: 🎜Redis::set('name', 'Taylor'); $values = Redis::lrange('names', 5, 10);
🎜🎜🎜🎜🎜🎜PhpRedis
Pour utiliser l'extension PhpRedis, vous devez changer l'option
client
de la configuration Redis dans le fichier de configurationconfig/database.php
enphpredis< /code> :
config/database.php
中 Redis 配置的client
选项修改为phpredis
:$values = Redis::command('lrange', ['name', 5, 10]);
除了默认的
host
,port
,database
和password
这些服务配置选项外,PhpRedis 还支持以下几个额外的连接参数:persistent
,prefix
,read_timeout
和timeout
。你可以将这些配置选项添加到配置文件config/database.php
中 Redis 服务配置项下:$redis = Redis::connection();
Redis 交互
你可以通过调用
Redis
facade 上的各种方法来与 Redis 交互。Redis
facade 支持动态方法,意味着你可以在 facade 上调用各种 Redis 命令 ,命令将直接传递给 Redis。在示例中,将通过Redis
facade 上的get
方法来调用 Redis 上的GET
命令:$redis = Redis::connection('my-connection');
如上所述,你可以在
Redis
facade 上调用任意 Redis 命令。Laravel 使用魔术方法将命令传递给 Redis 服务器,因此只需传递 Redis 命令所需的参数即可:Redis::pipeline(function ($pipe) { for ($i = 0; $i < 1000; $i++) { $pipe->set("key:$i", $i); } });
或者,你也可以使用
command
方法将命令传递给服务器,它接受命令的名称作为其第一个参数,并将值的数组作为其第二个参数:<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Redis; class RedisSubscribe extends Command{ /** * 控制台命令的名称和签名。 * * @var string */ protected $signature = 'redis:subscribe'; /** * 控制台命令说明。 * * @var string */ protected $description = 'Subscribe to a Redis channel'; /** * 执行控制台命令。 * * @return mixed */ public function handle() { Redis::subscribe(['test-channel'], function ($message) { echo $message; }); } }
使用多个 Redis 连接
你可以通过
Redis::connection
方法获得 Redis 实例:Route::get('publish', function () { // 路由... Redis::publish('test-channel', json_encode(['foo' => 'bar'])); });
这会返回一个默认的 Redis 实例。你可以传递连接或者集群名称给
connection
方法来获取在 Redis 配置中特定服务或集群:Redis::psubscribe(['*'], function ($message, $channel) { echo $message;});Redis::psubscribe(['users.*'], function ($message, $channel) { echo $message; });
管道命令
当你需要在一个操作中给服务器发送很多命令时,推荐你使用管道命令。
En plus des options de configuration de service par défaut depipeline
方法接受一个 Redis 实例的闭包
rrreeehôte
,port
,base de données
etmot de passe
, PhpRedis prend également en charge plusieurs paramètres de connexion supplémentaires suivants :persistent
,prefix
,read_timeout
ettimeout
. Vous pouvez ajouter ces options de configuration au fichier de configurationconfig/database.php
sous l'élément de configuration du service Redis :Vous pouvez interagir avec Redis en appelant diverses méthodes sur la façadeInteraction Redis
Redis
. La façadeRedis
prend en charge les méthodes dynamiques, ce qui signifie que vous pouvez appeler diverses commandes Redis 🎜 sur la façade, et les commandes seront transmises directement à Redis. Dans l'exemple, la commandeGET
sur Redis sera appelée via la méthodeget
sur la façadeRedis
: 🎜rrreee🎜Comme mentionné ci-dessus, vous peut appeler n'importe quelle commande Redis sur la façadeRedis
. Laravel utilise des méthodes magiques pour transmettre des commandes au serveur Redis, il suffit donc de transmettre les paramètres requis par la commande Redis : 🎜rrreee🎜 Alternativement, vous pouvez transmettre la commande au serveur en utilisant la méthodecommand
, qui accepte Le nom de la commande comme premier argument, et un tableau de valeurs comme deuxième argument : 🎜rrreee🎜Utilisation de plusieurs connexions Redis h4 >🎜Vous pouvez obtenir une instance Redis via la méthode
Redis::connection
: 🎜rrreee🎜Cela renverra une instance Redis par défaut. Vous pouvez transmettre le nom de la connexion ou du cluster à la méthodeconnection
pour obtenir un service ou un cluster spécifique dans la configuration Redis : 🎜rrreee🎜🎜🎜🎜🎜Commande Pipeline🎜🎜Lorsque vous devez envoyer plusieurs commandes au serveur en une seule opération, il est recommandé d'utiliser la commande pipeline. La méthodepipeline
accepte unefermeture
d'une instance Redis. Vous pouvez envoyer toutes les commandes à l'instance Redis et elles seront exécutées en une seule opération : 🎜rrreee🎜🎜🎜🎜🎜🎜Publier et s'abonner
Laravel fournit des interfaces pratiques pour
publier
ets'abonner
de Redis. Ces commandes Redis vous permettent d'écouter les messages sur un « canal » spécifié. Vous pouvez publier des messages d'une autre application vers une autre application, même en utilisant d'autres langages de programmation, permettant ainsi aux applications et aux processus de communiquer facilement.publish
及subscribe
提供了方便的接口。这些 Redis 命令让你可以监听指定「频道」上的消息。你可以从另一个应用程序发布消息给另一个应用程序,甚至使用其它编程语言,让应用程序和进程之间能够轻松进行通信。首先,我们使用
rrreeesubscribe
方法设置频道监听器。我们将这个方法调用放在 Artisan 命令 中,因为调用subscribe
方法会启动一个长时间运行的进程:现在我们可以使用
rrreeepublish
方法将消息发布到频道:通配符订阅
使用
Tout d'abord, nous utilisons la méthodepsubscribe
方法可以订阅通配符频道,可以用来在所有频道上获取所有消息。$channel
名称将作为第二个参数传递给提供的回调闭包
subscribe
pour configurer l'écouteur de la chaîne. Nous plaçons cet appel de méthode dans la commande Artisan car l'appel de la méthodesubscribe
démarre un processus de longue durée : Utilisez la méthodepsubscribe
pour vous abonner à la chaîne générique, qui peut être utilisé dans Obtenir tous les messages sur tous les canaux. Le nom$channel
sera transmis comme deuxième paramètre au rappel fourniclosure
: 🎜rrreee🎜Cet article est apparu pour la première fois sur le site Web 🎜LearnKu.com🎜. 🎜🎜