Redis 除了做缓存, 也可以做消息队列, 实现简单的消息的发布和订阅。Redis 消息订阅支持精确订阅和模糊订阅两种模式!
1. Redis 消息队列
1.1 Redis 消息队列特点
当有新消息发布时, 所有订阅的客户端全部接受到消息。Redis 订阅channel时,支持模糊匹配当新的客户端订阅时,之前的消息不会被重复接受1.2 常用命令
2. 命令测试
2.1 订阅消息
打开两个客户端,同时监听两个频道ch1 和 ch2
$ redis-cli 127.0.0.1:6379> SUBSCRIBE ch1 ch2Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "ch1"3) (integer) 11) "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) 2127.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名称, 不能查看模糊方式订阅的channel127.0.0.1:6379> PUBSUB channels1) "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 ch11) "ch1"2) (integer) 2
2.4.3 查看模糊订阅的数量
127.0.0.1:6379> PUBSUB numpat (integer) 3