zoukankan      html  css  js  c++  java
  • 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"}"

    完毕

  • 相关阅读:
    Codeforces1335F Robots on a Grid
    BJOI2014 大融合
    洛谷 P1463 [SDOI2005]反素数ant && codevs2912反素数
    codeforce 570 problem E&& 51Nod-1503-猪和回文
    洛谷noip 模拟赛 day1 T1
    noip 2010 三国游戏
    noip 2013 华容道
    汕头市队赛 SRM 07 D 天才麻将少女kpm
    noip2012 普及组
    汕头市队赛 SRM 08 B
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9715970.html
Copyright © 2011-2022 走看看