redis的发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。适宜做在线聊天、消息推送等。发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息,客户端可以订阅任意数量的频道。
需要注意的是发布者和订阅者并没有数据库的局限性在db0发布消息,在db1中的订阅者还是可以接受到消息的。
开启两个redis客户端,在第一个客户端订阅channel(通道),订阅操作是阻塞式的
subscribe c1 c2 cn 可以订阅多个通道,c1是通道名称
切换到另一个客户端进行发布消息。
publish c1 msg c1是通道名,msg是内容
切换到第一个客户端,结果:接收到hello消息。
psubscribe pattern1 pattern2 ··· 匹配与给定规则相同的channel,c*则匹配名称c开头的所有的通道。
pubsub channels [pattern] 返回所有的通道
pubsub numsub c1 ··· 返回单个或多个通道的订阅数
pubsub numpat 返回订阅模式的数量。 这个命令返回的不是订阅模式的客户端的数量, 而是客户端订阅的所有匹配模式(即上文的c*即是一个匹配模式)的数量总和
unsubscribe c1 ··· 退定多个channels
punsubscribe c* [pattern] 退定多个匹配模式的
Redis发布订阅与专门的消息中间件的比较(例如ActiveMQ)
(1)ActiveMQ支持多种消息协议,包括AMQP,MQTT,Stomp等,并且支持JMS规范,但Redis没有提供对这些协议的支持;
(2)ActiveMQ提供持久化功能,但Redis无法对消息持久化存储,一旦消息被发送,如果没有订阅者接收,那么消息就会丢失;
(3)ActiveMQ提供了消息传输保障,当客户端连接超时或事务回滚等情况发生时,消息会被重新发送给客户端,Redis没有提供消息传输保障。