redis的发布和订阅功能

来源:互联网 发布:linux execl 返回值 编辑:程序博客网 时间:2024/06/05 20:32

原理
redis的发布和订阅是个比较高深的概念,我一开始接触的时候感觉很茫然,但是后面用了下发现还是简单的。看来还是多需要自己尝试。
其实和消息队列差不多的原理,就是一个发布的频道,所有订阅这个频道的都能收到消息。即一个client可以订阅多个 channel,也可以向多个channel发送消息。

代码展示
我觉得还是直接上代码大家理解的比较快。
首先,我们需要两个php脚本,一个表示client,即订阅方,一个表示server,即发布方。

<?phppublish.php//发布方 即publish的代码展示$redis = new Redis();$redis->connect('127.0.0.1', 6379);//使用订阅的话需要连接redis的端口$message='test message';//发布消息的内容$message .= "\n";while(1){        $ret=$redis->publish('test_chennel',$message);//发布,前面一个参数是发布的频道,后面一个参数是发送的内容        file_put_contents("test.txt",$ret.PHP_EOL,FILE_APPEND);}?>

然后订阅方的代码:

subscribe.php<?php//连接到发布方的redis上,然后定义一些基本的参数$redis = new Redis();$redis->connect('127.0.0.1', 6379);define('_MESSAGE_COUNT',1000);$message_index=0;$message_str="";try {    //订阅信息,第一个参数表示要订阅的频道,是个数组,可以多个频道,第二个参数表示回调函数    $result=$redis->subscribe(array('test_chennel'), 'callback');} catch (Exception $e) {    echo 'error';    exit;}//redis订阅的回调函数,第一个参数表示实体,第二个参数表示订阅的频道,第三个参数表示收到的数据,然后可以根据收到的数据进行自己的逻辑处理function callback($instance, $channelName, $message) {        global $message_index,$message_str;        //获取订阅操作之后的逻辑很简单,我这里就是直接输出订阅到的消息        if($message){            $message_index++;            $message_str=$message;            if($message_index>_MESSAGE_COUNT){                echo $message_str;                $message_index=0;                $message_str="";            }        }}?>

代码执行步骤,首先是执行发布的代码,即在linux环境下执行

php publish.php

然后在新的窗口执行

php subscribe.php

定于的消息如下结果展示如下,只要进程不停,就一直会输出订阅到的test message的消息:
这里写图片描述

2 0
原创粉丝点击