redis(二)-发布订阅

参考资料:
redis 4.x cookbook 中文版;
redis官方文档
注: 本文redis的版本为: 5.0.3

redis学习路径

发布订阅:

注意,如果先发布消息,然而频道没有订阅者,这时的消息会被丢失;

redis的发布订阅是一个消息推送的机制;
发布者(publisher)向指定频道(channel)发布消息(message);
频道(channel)向订阅者(subscriber)推送(deliver)消息;
有很多专门做消息推送的中间件,比redis的发布订阅要好很多;但是当你的系统需要快速实现简单的消息推送功能的话,redis的发布订阅还是能满足需求的;

最基础的操作:订阅一个频道和向频道发送消息;

#订阅
127.0.0.1:6379> subscribe testpubsub_1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "testpubsub_1"
3) (integer) 1
1) "message"
2) "testpubsub_1"
3) "this is new message"
#发布
127.0.0.1:6379> publish testpubsub_1 "this is new message"
(integer) 1

PSUBSCRIBE 正则表达式1 正则表达式2 … 批量订阅匹配上正则表达式的所有频道;
值得注意的是,如果订阅时正则表达式没有匹配到频道,在后续如果发布到某个新频道时匹配上了正则,也会推送消息;

#订阅
127.0.0.1:6379> psubscribe a*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "a*"
3) (integer) 1
1) "pmessage"
2) "a*"
3) "abc*"
4) "1"
1) "pmessage"
2) "a*"
3) "ab"
4) "1"
#发布
127.0.0.1:6379> publish abc* "1"
(integer) 1
127.0.0.1:6379> publish ab "1"
(integer) 1

UNSUBSCRIBE [channel [channel …]]
取消订阅频道;支持批量(需提供准确频道名称);

PUNSUBSCRIBE [pattern [pattern …]]
通过正则匹配,批量取消订阅;

PUBSUB CHANNELS [pattern]
获取正在活跃的频道(至少有一个客户端在订阅);如果有将会返回频道名称;
注意!!!使用psubscribe命令订阅不会被统计到;

PUBSUB NUMSUB [channel-1 … channel-N]
统计指定频道的订阅者数量;

127.0.0.1:6379> pubsub numsub ab abc*
1) "ab"
2) (integer) 1
3) "abc*"
4) (integer) 0

PUBSUB NUMPAT

#订阅1
127.0.0.1:6379> psubscribe ab
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "ab"
3) (integer) 1
#订阅2
127.0.0.1:6379> psubscribe a*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "a*"
3) (integer) 1
#获取当前发布订阅系统中,有几种订阅方式;
#通俗一点:统计所有psubscribe命令中的正则表达式总数;
#注意这里统计不是根据正则表达式字符串来做去重统计,而是不去重的全统计;
127.0.0.1:6379> pubsub numpat
(integer) 2
#再新开一个订阅
127.0.0.1:6379> psubscribe a*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "a*"
3) (integer) 1
#再统计一次
127.0.0.1:6379> pubsub numpat
(integer) 3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章