笔记-redis-订阅系统
PUBLISH channel message #将信息发送到指定的频道。
SUBSCRIBE channel [channel ...] #订阅一个或多个频道的信息。
UNSUBSCRIBE [channel [channel ...]] #退订频道。
PSUBSCRIBE pattern [pattern ...] #订阅一个或多个符合给定模式的频道。
PUNSUBSCRIBE [pattern [pattern ...]] #退订给定模式的频道。
PUBSUB subcommand [argument [argument ...]] #查看订阅与发布系统状态。
# 发布消息到通道
# 目前没有订阅者
127.0.0.1:6379> publish fir ‘aaa‘
(integer) 0
PUBLISH 命令用于向给定的频道发送信息,返回值为接收到信息的订阅者数量:
redis> PUBLISH treehole "top secret here ..."
(integer) 0
redis> PUBLISH chatroom "hi?"
(integer) 1
# 订阅通道
SUBSCRIBE 命令订阅给定的一个或多个频道:
redis> SUBSCRIBE chatroom
Reading messages... (press Ctrl-C to quit)
1) "subscribe" # 订阅反馈
2) "chatroom" # 订阅的频道
3) (integer) 1 # 目前客户端已订阅频道/模式的数量
1) "message" # 信息
2) "chatroom" # 发送信息的频道
3) "hi?" # 信息内容
SUBSCRIBE 还可以订阅多个频道,这样一来它接收到的信息就可能来自多个频道:
redis> SUBSCRIBE chatroom talk-to-jack
Reading messages... (press Ctrl-C to quit)
1) "subscribe" # 订阅 chatroom 的反馈
2) "chatroom"
3) (integer) 1
1) "subscribe" # 订阅 talk-to-jack 的反馈
2) "talk-to-jack"
3) (integer) 2
1) "message" # 来自 chatroom 的消息
2) "chatroom"
3) "yahoo"
1) "message" # 来自 talk-to-peter 的消息
2) "talk-to-jack"
3) "Goodmorning, peter."
匹配模式命令不啰嗦。
pubsub channels
查看当前所有频道信息
最后, UNSUBSCRIBE 命令和 PUNSUBSCRIBE 负责退订给定的频道或模式。
需要注意的是如果同时使用
SUBSCRIBE foo
PSUBSCRIBE f*
会导致客户端会重复收到频道foo的消息,一条来自foo(message),一条来自f*(pmessage),这一特征由底层实现方法的方式所致。
当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher)。
而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE 命令接收信息的时候,我们称这个客户端为订阅者(subscriber)。
为了解耦发布者(publisher)和订阅者(subscriber)之间的关系,Redis 使用了 channel (频道)作为两者的中介 —— 发布者将信息直接发布给 channel ,而 channel 负责将信息发送给适当的订阅者,发布者和订阅者之间没有相互关系,也不知道对方的存在:
实际上,redis发布系统使用链表来存储已订阅的频道,发布频道,群发频道,在操作时按序匹配操作对象然后进行发布。
是一个非常简单的消息发布机制,这样的话,它会存在以下的问题:
总之,ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的,
但是如果系统中已经有了Redis,并且需要基本的发布订阅功能,就没有必要再安装ActiveMQ了,
因为可能ActiveMQ提供的功能大部分都用不到,而Redis的发布订阅机制就能满足需求。
原文:https://www.cnblogs.com/wodeboke-y/p/10933336.html