zoukankan      html  css  js  c++  java
  • php redis 发布订阅 实现redis队列

    redis的服务器
    windows端:https://github.com/mythz/redis-windows
    linux:https://redis.io/download

    windows下载扩展php_redis.dll:
    https://pecl.php.net/package/redis/3.1.6/windows

    php中的运用,必须要php_redis扩展
    首先,解压redis的服务器包,直接双击‘redis-server.exe’,启动redis服务,不要关闭启动弹出的终端,关联了终端相当于就又关了redis。
    同样双击“redis-cli.exe”输入subscribe first ,订阅频道
    分别运行 sub.php,subscribe客服端是堵塞的,可以在终端运行这个php代码,效果更明显一些;更或者让其一直运行在后台
    nohup /usr/bin/php /path/sub.php >> /tmp/sub.log 2>&1 &
    再运行 pub.php,
    当执行完pub.php后,在 redis-cli的终端和sub.php会收到“hello world!”

    #subscribe客服端 sub.php
    $redis = new Redis();
    $res = $redis->pconnect('127.0.0.1', 6379);
    $key = 'first';
    #这里的subscribe是一个独占链接的,屏幕将如同开启redis服务的终端一样,处于一直在线等一样。因此此处可以看出订阅者(客服端)的程序是以阻塞的方式等待,发布者的消息。
    $redis->subscribe(array($key),'callback');
    function callback($redis, $channel, $msg){
    var_dump($redis);
    echo $channel;
    echo $msg;
    return true;
    }
    #public客服端 pub.php
    #无需独占链接,不是堵塞的
    $redis = new Redis();
    $res = $redis->connect('127.0.0.1', 6379 );
    $key = 'first';//Channel 订阅这频道的订阅者,都能收收到消息
    $value = 'hello world!';
    $res = $redis->publish($key,$value);

    说到这里可以完一小节了。
    这里有个问题是,大规模的请求pub.php文件,要求发布消息,为了抗高并发的发布消息,是不是又应该使用队列(redis),但是我们把消息都放入到redis的队列中,怎么实时的监听redis中是否有数据,我看大多会说的,就是在linux中经常会用到的定时器。如:
    1
    2
    ##加一个定时器,修改让pub.php每隔10分钟去redis中取数据
    crontab -e
    */10 * * * * /path/pub.php

  • 相关阅读:
    小程序:全局配置(pages、windows、tabBar)
    小程序:(创建项目、目录结构、页面的生命周期、路由)
    CSS:定位(定位的叠放次序、定位的特性)
    CSS:定位(静态、相对、绝对、固定、粘性)
    CSS:清除浮动(额外标签法、父级添加overflow、伪元素法、双伪元素法)
    CSS:浮动(左浮动、右浮动)
    验证码
    JFreeChart
    css:css3(圆角边框、盒子阴影、文字阴影)
    jvm:字节码执行流程
  • 原文地址:https://www.cnblogs.com/bush/p/10956899.html
Copyright © 2011-2022 走看看