14. Redis 发布订阅-实现消息队列
Redis 除了做缓存, 也可以做消息队列, 实现简单的消息的发布和订阅。Redis 消息订阅支持精确订阅和模糊订阅两种模式!
1. Redis 消息队列
1.1 Redis 消息队列特点
- 当有新消息发布时, 所有订阅的客户端全部接受到消息。
- Redis 订阅channel时,支持模糊匹配
- 当新的客户端订阅时,之前的消息不会被重复接受
1.2 常用命令
操作命令 | 命令格式 | 描述 |
---|---|---|
publish | publish $ch $msg | 发布消息, 一次只能向一个channel发布一条消息 |
subscribe | subscribe $ch1 $ch2… | 订阅频道, 可同时订阅多个频道。不支持模糊匹配 |
psubscribe | psubscribe $chPattern1 $chPattern2… | 订阅频道, 可同时订阅多组频道, 支持模糊匹配 |
pubpub | pubsub … args … | 监测pub/sub系统相关状态 |
punsubscribe | – | 命令行不支持, ctrl+c 退出订阅 |
unsubscribe | – | 命令行不支持, ctrl+c 退出订阅 |
2. 命令测试
2.1 订阅消息
打开两个客户端,同时监听两个频道ch1 和 ch2
$ redis-cli
127.0.0.1:6379> SUBSCRIBE ch1 ch2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "ch1"
3) (integer) 1
1) "subscribe"
2) "ch2"
3) (integer) 2
2.2 模糊订阅
新起三个客户端, 实现模糊订阅频道 ch*
$ redis-cli
127.0.0.1:6379> PSUBSCRIBE ch*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "ch*"
3) (integer) 1
2.3 发布消息
分别向频道ch1 和 ch2 发送消息.
$ redis-cli
127.0.0.1:6379> PUBLISH ch1 hello
(integer) 2
127.0.0.1:6379> PUBLISH ch2 hi
(integer) 2
2.3 查看消息
当发布消息时, 会发现五个客户端均有消息输出, 但是对于精确订阅和模糊订阅两种方式, 接收到的消息体略有不同.
2.3.1 精确订阅输出
1) "message"
2) "ch1"
3) "hello"
1) "message"
2) "ch2"
3) "hi"
2.3.2 模糊订阅接收消息体
1) "pmessage"
2) "ch*"
3) "ch1"
4) "hello"
1) "pmessage"
2) "ch*"
3) "ch2"
4) "hi"
2.4 查看监听状态
2.4.1 查看所有精确监听的channel名称
- 支持模糊匹配进行过滤
只能查看采用精确方式订阅的channel名称, 不能查看模糊方式订阅的channel
127.0.0.1:6379> PUBSUB channels
1) “ch1”
2) “ch2”127.0.0.1:6379> PUBSUB channels ch*
1) “ch1”
2) “ch2”
2.4.2 查看精确订阅具体channel 的客户端数量
- 不支持模糊匹配
结果只包含精确订阅的客户端数量, 不包含模糊订阅的客户端数量
127.0.0.1:6379> PUBSUB numsub ch1
1) “ch1”
2) (integer) 2
2.4.3 查看模糊订阅的数量
127.0.0.1:6379> PUBSUB numpat
(integer) 3
还没有评论,来说两句吧...