zoukankan      html  css  js  c++  java
  • php-redis 消息订阅笔记

    最近学习了一下php-redis相关的知识,其中有一个功能叫发布订阅,Redis 发布订阅(pub/sub)是一种消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息。

    直接上php代码如下:

    普通 - 【发送者pub】- pub.php

    1 $redis = new Redis();
    2 $redis->connect('127.0.0.1', 6379);
    3 $redis->auth('requirepass');
    4 
    5 $res = $redis->publish('channel', date('Y-m-d H:i:s'));
    6 var_dump($res); //成功返回1,失败返回0

    普通 - 【订阅者sub】- sub.php

    1 $redis = new Redis();
    2 $redis->connect('127.0.0.1', 6379);
    3 $redis->auth('requirepass');
    4 $redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
    5 
    6 function callback ($redisObj, $channel, $msg){
    7     echo 'ChannelName is '.$channel.', Msg is '.$msg; //ChannelName is channel, Msg is 2019-07-17 09:53:55
    8 }
    9 $redis->subscribe(['channel'], 'callback');

    这种发送和订阅的原理可以理解成一端发送,另外一端马上收到消息,确切的说就是通过向channel频道发送消息,其他订阅了channel频道的端都可以立马收到消息。

     【设置有效期的键值】 - pub.php

    1 $job = 'notify#' . date('YmdHis');
    2 $res = $redis->setex($job, 10, 'waiting');
    3 var_dump($res); //成功返回bool(true),失败返回bool(false)

    【键空间消息订阅】- sub.php

    1 $redisKey = '__keyevent@0__:expired'; //这个格式是固定的,0表示第一个库,redis默认使用第一个库0
    2 $redis->psubscribe([$redisKey], 'callBack');
    3 function callBack($redisObj, $pattern, $channel, $msg) {
    4     echo $msg."
    "; //notify#20190717100350
    5 }

    这种发送和订阅的原理可以理解成当键值过期的时候会自动发送消息,另外一端开启了键空间消息的订阅就可以收到消息了。

    特别说明:因为订阅事件启动后是阻塞执行的,所以需要一直挂着终端等待订阅,这种情况只能满足测试开发,如果是实际应用就不行了,这个时候我们希望监听后台始终运行希望像守护进程一样在后台,Linux系统中,可以使用nohup命令,具体用法待续。

  • 相关阅读:
    js 判断多个一样的name
    VisualSVN Server的配置和使用方法 图文
    file get contents 访问不了域名原因
    js confirm函数 删除提示
    关于PHP的curl开启问题
    重置svn地址
    google 火狐 模拟显示手机页面插件
    开启Apache mod_rewrite模块完全解答
    zend studio 9.0.4 破解、汉化和字体颜色及快捷键相关设置
    zend studio 8 修字体和大小
  • 原文地址:https://www.cnblogs.com/firstlady/p/11199091.html
Copyright © 2011-2022 走看看