注:原始资料来自享学课堂
目录
1、redis客户端实现发布订阅
1.1 启动端口,发布hello world
127.0.0.1:6379> publish channel:test "hello word"
//发布成功,还没有人订阅主题test,所以返回0
(integer) 0
1.2 启动另一个客户端,订阅
127.0.0.1:6379> subscribe channel:test
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:test"
3) (integer) 1
1) "message"
2) "channel:test"
3) "hello word"
此时发布消息返回1
127.0.0.1:6379> publish channel:test "hello word"
(integer) 1
127.0.0.1:6379> publish channel:test "hello word2"
(integer) 1
127.0.0.1:6379>
1.3 常用指令
查看订阅数:pubsub numsub channel:test // 频道 channel:test 的订阅数
127.0.0.1:6379> pubsub numsub channel:test
1) "channel:test"
2) (integer) 1
127.0.0.1:6379>
取消订阅unsubscribe channel:test
127.0.0.1:6379> unsubscribe channel:test
1) "unsubscribe"
2) "channel:test"
3) (integer) 0
127.0.0.1:6379>
1.4 按模式规则订阅和取消订阅
发布两个主题
127.0.0.1:6379> publish test "hello world"
(integer) 0
127.0.0.1:6379> publish test2 "hello world2"
(integer) 0
定于以test开头的主题
127.0.0.1:6379> psubscribe test*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "test*"
3) (integer) 1
1) "pmessage"
2) "test*"
3) "test"
4) "hello world"
1) "pmessage"
2) "test*"
3) "test2"
4) "hello world2"
2、应用场景
- 今日头条订阅号、微信订阅公众号、新浪微博关注、邮件订阅系统
- 即时通信系统:即时聊天
- 群聊:通过模式订阅实现群聊
2.1 测试实践:微信班级群 class:20170101
1
、学生
C
订阅一个主题叫 :
class:1
subscribe class:1
2、学生 A 针对 class:1主体发送消息,那么所有订阅该主题的用户都能够接收到该数据。
publish class:1 "hello world! I am A"
3、学生 B 针对 class:20170101 主体发送消息,那么所有订阅该主题的用户都能 够接收到该数据。
publish class:1 "hello world! I am B"
展示学生 C 接受到的 A\B 同学发送过来的消息信息
1) "subscribe"
2) "class:20170101"
3) (integer) 1
1) "message"
2) "class:20170101"
3) "hello world! I am A"
1) "message"
2) "class:20170101"
3) "hello word! I am B"