Redis 学习笔记(十一)redis订阅和发布

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

redis订阅频道(channel)

需要先订阅频道,再向频道发送消息。

redis 发布订阅的原理:

通过 subscribe 命令订阅频道后,redis-server 中将维护一个字典,字典的键是频道名,值是一个链表,链表中保存了所有订阅了该频道的客户端(subscribe 命令就是将客户端添加到指定频道的链表中)。

订阅频道命令

  subscribe  ...     #订阅频道  ,一旦客户端进入订阅状态,客户端就只可接受订阅相关的命令:
                              #SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE和PUNSUBSCRIBE
                              #除了这些命令,其他命令一律失效。

通过 publish 命令发送信息,redis-server 会使用指定的频道为键,在自身维护的字典中查找频道链表中的所有客户端,遍历链表将消息发布给订阅者。

发布命令

  publish     #将信息 message 发送到指定的频道 channel
                                #返回值为接收到消息的客户端数量

redis订阅模式(pattern)

在这里引用图片以便更好的理解订阅模式
Redis 学习笔记(十一)redis订阅和发布_第1张图片
模式匹配了两个频道,当其中一个频道接收到了发布者发送的消息,这个频道的所有订阅客户端都会收到消息,且订阅了模式的所有客户端也会收到消息。

订阅模式命令:

  psubscribe  ...  #订阅指定的模式pattern:pattern参数可以使用匹配符
                            #h?llo 模式可以匹配到hello、hallo、hxllo等频道
                            #h*llo 模式可以匹配到hllo、heeeello等频道
                            #h[ae]llo 模式可以匹配到hello和hallo频道,但是匹配不到hxllo频道

退订

退订频道命令:

  unsubscribe  ...  #退订指定的频道,如果没有指定频道参数,则退订所有的频道

退订模式命令:

  unpsubscribe  ...  #退订指定的模式,如果没有指定模式参数,则退订所有的模式

退出redis-cli客户端会自动退订。

自省(监测状态)

查看活跃的频道:

  pubsub channels   #获取至少有一个订阅者的频道,
                             #pattern参数为空则列出所有活跃频道,参数有值时只列出与模式匹配的活跃频道

查看指定频道的订阅者数量:

  pubsub numsub  ... #依次获取指定频道的订阅者数量(不包含订阅模式的订阅者)

查看客户端订阅的模式数量:

  pubsub numpat    #返回订阅模式的数量

redis发布订阅应用场景

1、实时信息系统(网站的公告)

2、实时聊天(将频道当做聊天室)

3、用户的订阅和关注

你可能感兴趣的:(Redis,redis,java,缓存)