14. Redis 发布订阅-实现消息队列

20 篇文章 1 订阅

Redis 除了做缓存, 也可以做消息队列, 实现简单的消息的发布和订阅。Redis 消息订阅支持精确订阅和模糊订阅两种模式!

1. Redis 消息队列

1.1 Redis 消息队列特点

  • 当有新消息发布时, 所有订阅的客户端全部接受到消息。
  • Redis 订阅channel时,支持模糊匹配
  • 当新的客户端订阅时,之前的消息不会被重复接受

1.2 常用命令

操作命令命令格式描述
publishpublish $ch $msg发布消息, 一次只能向一个channel发布一条消息
subscribesubscribe $ch1 $ch2…订阅频道, 可同时订阅多个频道。不支持模糊匹配
psubscribepsubscribe $chPattern1 $chPattern2…订阅频道, 可同时订阅多组频道, 支持模糊匹配
pubpubpubsub … 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值