Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。
发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。
Redis发布订阅功能
(1)发送消息
Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。
(2)订阅某个频道
Redis采用SUBSCRIBE命令订阅某个频道,其返回值包括客户端订阅的频道,目前已订阅的频道数量,以及接收到的消息,其中subscribe表示已经成功订阅了某个频道。
下边有一个小例子,我这里使用PHP来实现:
订阅端代码:
订阅端代码需要在shell中运行:
$redis = new Redis(); $redis->pconnect("127.0.0.1", 6379); //订阅 echo "订阅msg这个频道,等待消息推送... "; $redis->subscribe(["xxxx"], "callfun"); function callfun($redis, $channel, $msg) { print_r([ "redis" => $redis, "channel" => $channel, "msg" => $msg ]); }//*/
Subscribe订阅命令,第一个参数是订阅的频道,第二个参数是回调函数。
在shell中运行结果如下:
等待推送。
推送端代码:
推送端在网页中运行。
$redis = new Redis(); $redis->connect("127.0.0.1",6379); $redis->publish("xxxx", "来自msg频道的推送"); echo "msg频道消息推送成功~ "; $redis->close();///*/
推送端代码在网页中运行结束之后,我们去到shell中的结果如下图所示:
以上大概就是实现了redis的订阅及发布。当然,实际应用中肯定和上边的例子是不一样的。
这个需要到时候再看,大概理解订阅及发布的原理就好。
最后放一下redis发布订阅常用的一些命令:
Redis 发布订阅命令下表列出了 redis 发布订阅常用命令:
序号
命令及描述
1
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。
2
PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。
3
PUBLISH channel message 将信息发送到指定的频道。
4
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。
5
SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。
6
UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。