一个channel可以被多个客户端订阅,每个客户端都会收到新消息,一个客户端也可以订阅多个channel。
执行subscribe订阅channel,执行publish往channel发送数据。
1、subscribe:订阅一个或多个channel
语法:subscribe channel [channel . . .]
如subscribe ch1 ch2
相近命令:psubscribe、unsubscribe、punsubscribe
psubscribe:根据正则匹配订阅
语法:psubscribe pattern [pattern . . .]
如psubscribe ch*
unsubscribe:取消订阅
punsubscribe:根据正则匹配取消订阅
2、publish:往指定的channel发送数据
语法:publish channel message
如publish ch1 a
publish ch1 b
publish ch2 a
publish ch2 b
3、pubsub:
语法:pubsub subcommand [argument [argument . . .]]
subcommand有三个,channels、numsub、numpat。
1)pubsub channels:查看以subscribe方式订阅的channel
语法:pubsub channels [pattern]
如pubsub channels,查看以subscribe方式订阅的所有channel
如pubsub channels ch*,查看以subscribe方式订阅的、以"ch"开头的channel
2)pubsub numsub:查看指定的一个或多个channel,分别有多少个订阅者
语法:pubsub numsub channel [channel . . .]
如pubsub numsub ch1 ch2,查看ch1、ch2分别有多少个订阅者
3)pubsub numpat:查看以psubscribe方式订阅的数量
语法:pubsub numpat
如果在一个客户端执行psubscribe ch*,在另一个客户端执行psubscribe abs*,在当前客户端执行pubsub numpat,会返回2。
redis的发布订阅功能有一个致命缺点,那就是如果先publish,后subscribe,那么这期间的数据都丢了,而且channel数据不能持久化,一旦redis服务器宕机,未处理的数据都会丢。更常见的,假如客户端重启或者升级的话,在这个过程中publish的数据都会丢。如果数据很重要的话,就得用消息队列。
值得注意的是,用keys *命令是查看不了channel的。