资讯专栏INFORMATION COLUMN

【redis专题(7)】命令语法介绍之Pub/Sub

DevTTL / 1394人阅读

摘要:主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。订阅者可以通过和命令向订阅自己感兴趣的消息类型,将消息类型称为通道。当发布者通过命令向发送特定类型的消息时。将信息发送到指定的频道。

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。
redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个channel,也可以向多个channel发送消息。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

最明显的用法就是构建实时消息系统,比如普通的即时聊天,群聊等功能。这时每个人都是订阅者与发布者。

命令简述
SUBSCRIBE channel [channel2 ...] 

订阅给定的一个或多个频道的信息。

PSUBSCRIBE pattern [pattern ...] 

订阅一个或多个符合给定模式的频道。每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等)。 news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类。

pubsub channels [pattern]

列出活跃频道(正在被subscribe监听的频道,注意不包括psubscribe监听的)

pubsub numsub [channel-1 ... channel-n] 

返回给定频道的订阅者数量,订阅模式的客户端不计算在内

PUBSUB NUMPAT 

返回订阅模式的数量。

UNSUBSCRIBE [channel [channel ...]] 

指退订给定的频道。

PUNSUBSCRIBE [pattern [pattern ...]] 

退订所有给定模式的频道。

PUBLISH channel message 

将信息发送到指定的频道。

Example

开两个redis-cli 一个作为发布者,一个作为订阅者;

# 订阅者
127.0.0.1:6379> subscribe news #订阅news频道,这个时候就是一个监听状态了,只要发布者一发布消息,订阅者就会收到
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1

# 发布者
redis 127.0.0.1:6379> publish news "good good study"
(integer) 1 #这里反馈的是有多少个subscribe客户端接收到这条news;

redis 127.0.0.1:6379> publish news "day day up"
(integer) 1

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37246.html

相关文章

  • redis专题(4)】命令语法介绍sorted_set

    摘要:如果中不存在,就在中添加一个,是就好像它之前的是。如果不存在,就创建一个只含有指定成员的有序集合。 有序集合可以模拟优先级队列与延时队列,排行榜等功能的实现 增 zadd key score1 value1 score2 value2 .. redis 127.0.0.1:6379> zadd stu 18 lily 19 hmm 20 lilei 21 lilei (integer...

    Astrian 评论0 收藏0
  • redis专题(2)】命令语法介绍string

    摘要:当不存在时,返回一个错误。,对给定求逻辑非,并将结果保存到。空字符空格求逻辑或注意对于操作不能多个查返回的。通配任意多个字符包括没有如和等。通配括号内的某个字符如和,但不匹配。 REDIS有6大数据结构:string,link,sortedset,sets,hash,Geo。 这6个结构我将用6篇文章来记录各自是怎么用的,然后再用一篇文章来说一下各自的应用场景; string 增 se...

    laoLiueizo 评论0 收藏0
  • redis专题(2)】命令语法介绍string

    摘要:当不存在时,返回一个错误。,对给定求逻辑非,并将结果保存到。空字符空格求逻辑或注意对于操作不能多个查返回的。通配任意多个字符包括没有如和等。通配括号内的某个字符如和,但不匹配。 REDIS有6大数据结构:string,link,sortedset,sets,hash,Geo。 这6个结构我将用6篇文章来记录各自是怎么用的,然后再用一篇文章来说一下各自的应用场景; string 增 se...

    luffyZh 评论0 收藏0
  • redis专题(8)】命令语法介绍通用KEY

    摘要:通配任意多个字符包括没有如和等。通配括号内的某个字符如和,但不匹配。查询的生命周期默认永久有效单位秒数如果为单位就变为毫秒不让失效从当前数据库中随机返回不删除一个。 基础命令 select num 数据库选择 默认有16[0到15]个数据库,默认自动选择0号数据库 move key num 移动key到num服务器 del key [key ...] 删除给定的一个或多个 ke...

    elina 评论0 收藏0
  • #yyds干货盘点#RedisPub/Sub

    摘要:如下图,客户端订阅频道干货盘点之持久化如下图,当消息发送到客户端订阅的频道时,这个消息就会被订阅的所有未故障的客户端接接收到干货盘点之持久化实例演示演示的发布订阅,我们需要开启多个客户端,订阅频道。 1、简介李子捌把话说在前头,如果你是面试或者为了了解知识来学习这一知识点,我觉得是有必要的;但是如果你是作为公司的技术负责人...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

最新活动
阅读需要支付1元查看
<