php redis 发布订阅功能(publish/subscribe)

特性

  1. 消息发布者,即publish客户端,无需独占链接,你可以在publish消息的同时,使用同一个redis-client链接进行其他操作
  2. 消息订阅者,即subscribe客户端,需要独占链接,即进行subscribe期间,redis-client无法穿插其他操作,此时client以阻塞的方式等待“publish端”的消息,因此subscribe端需要使用单独的链接,甚至需要在额外的线程中使用。

代码示例

1. 订阅端代码(subscribe.php

<?php
//设置不超时,否则会被php.ini中的超时限制时间 $redis
= new Redis();
//创建一个长链接
$redis->pconnect('localhost', 6379, 0); $redis->subscribe(['order'], function ($redis, $chan, $msg) {
//回调逻辑处理 var_dump($redis); var_dump($chan); var_dump($msg); echo $channelName,
"==>", $msg,PHP_EOL; }); //subscribe函数的第一个参数是一个数组,这意味着可以订阅多个发布端,回调函数里面有3个参数,
第一个是redis实例,第二个是订阅的频道,第三个是订阅的消息内容,在命令下运行该文件就会进入等待发布端发布消息的阻塞状态!

phpcli模式执行

php subscribe.php

2. 发布端代码(publish.php)

<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$order = [
    'id' => 1,
    'name' => 'iphone'
];
$redis->publish("order", json_encode($order));
//发布端代码可以是phpcli模式执行,也可以在项目代码里实现

3.订阅端结果

class Redis#1 (1) {
  public $socket =>
  resource(5) of type (Redis Socket Buffer)
}
string(5) "order"
string(16) "{"id":1,"name":"iphone"}"

完毕

原文地址:https://www.cnblogs.com/wt645631686/p/9715970.html