• 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"}"

    完毕

  • 相关阅读:
    adb稳定性monkey测试(转载)
    Cookie、sessionStorage、localStorage的异同
    Vue-eBookReader 学习笔记(初始化部分)
    ValueError: Max value is 14 解决方案
    Chrome 报错: Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
    Bootstrap使用方法
    Vue笔记
    3D相册 复仇者联盟
    奔跑的少年
    钟表练习 html+css实现
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9715970.html
Copyright © 2020-2023  润新知