Redis 发布/订阅

发布/订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

pub即publish,出版、发布;publisher,发布者。

sub即subscribe,订阅;subscriber,订阅者。

订阅者订阅某个channel(频道),发布者将消息发布到某个频道,redis服务器将消息推送给这个频道的所有订阅者。

channel  管道、通道、频道。

 发布者、订阅者都是redis的客户端,每个redis客户端都可以是发布者,往某个频道中发布消息。

 

Redis的消息是在线即时消息,类似于广播,只有在线的订阅者(连接到Redis服务器的客户端),才会收到消息。

若当时不在线,并不会收到消息。后面登陆了(连接到服务器),服务器也不会推送之前(这个客户端未收到)的消息。服务器只推送一遍。


使用示例

1、启动一个redis客户端,连接到服务器,订阅频道

 subscribe channel1     #订阅channel1

 

一个条目用3项表示:

(1)"subscribe"   这个条目是一个订阅的频道

(2)频道名

(3)这个频道是当前客户端订阅的第几个频道

订阅之后,当前标签页会一直阻塞,等待接收Redis服务器推送的消息。

2、另起一个标签页,再运行一个redis客户端,连接redis服务器,推送消息

publish channel1 "hello"   #向channel1里推送一条消息,消息内容是hello

返回接收到此消息的订阅者数量。

每个客户端都可以往某个频道中发送消息,这些消息由redis服务器推送给所有在线的、订阅了此频道的客户端。

3、切换到另一个标签页,看到订阅channel1的客户端已经接受到消息:

(1)“message”   表示这是一条消息

(2)这条消息来自哪个频道

(3)消息内容

此客户端订阅了哪些频道,这些信息保存在redis服务器上,关闭与redis服务器的连接,redis服务器会删除该连接(该客户端的信息),订阅了哪些频道,这些信息就没了。

即订阅只在本次连接期间有效。


 

发布/订阅的相关命令

subscribe  channel1  channel2   #订阅一个或多个频道

psubscribe CCTV1  #p即pattern,用正则表达式指定要订阅的频道,会订阅所有匹配的频道
psubscribe CCTV*  #订阅所有以CCTV开头的频道
psubscribe *TV  #订阅所有以TV结尾的频道
psubscribe CCTV* CNTV* #可以指定多个匹配模式,订阅以CCTV开头的所有频道、订阅所有以CNTV开头的所有频道

un
subscribe channel1 channel2 #退订一个或多个频道

punsubscribe CCTV* CNTV* #退订以CCTV开头的所有频道、退订以CNTV开头的所有频道


publish  channel1 "hello" #往某个频道里推送消息

原文地址:https://www.cnblogs.com/chy18883701161/p/11076790.html