Redis 学习笔记(十三)Redis订阅发布

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 学习笔记(十三)Redis订阅发布相关的知识,希望对你有一定的参考价值。

前言:Redis发布订阅(pub/sub)是一种消息通信模式:发送者发送消息到频道,订阅者从频道中接收消息


1.订阅/发布消息

1.简单流程图

在这里插入图片描述
补充:

  • 发布者不需要管是什么人订阅了,只需将消息发送到频道里
  • 订阅者也不需要知道什么人发布的,只需订阅感兴趣的频道,接收感兴趣的消息
  • 频道就像当于一个消息队列,每当发布者将数据发送到队列里,订阅者就会从队列中一一获取到数据

订阅相关命令:

命令描述
pubsub subcommand查看订阅与发布系统状态
publish channel message将消息发送到给定的频道
subscribe channel订阅给定的一个或多个频道的信息
unsubscribe channel退订给定的频道
psubscribe pattern订阅一个或多个符合给定模式的频道
punsubscribe pattern订阅一个或多个符合给定模式的频道
PUBSUB CHANNELS查看当前有多少频道被订阅

2. 模拟订阅、发布(准备两个client)

  • 发布
[root@localhost bin]# redis-cli -p 6379
# 发送端将消息发送到频道zhangsan中去
127.0.0.1:6379> PUBLISH zhangsan "hello"
(integer) 1
  • 订阅
[root@localhost bin]# redis-cli -p 6379
# 订阅了一个张三的频道
127.0.0.1:6379> SUBSCRIBE zhangsan
127.0.0.1:6379> SUBSCRIBE zhangsan
Reading messages... (press Ctrl-C to quit)
1) "message"	
2) "zhangsan"	# channel
3) "hello"		# msg

  • 原理:
  1. 通过SUBSCRIBE命令订阅某频道后,redis-server里维护了一个字典,字典的键就是一个个频道,而字典的值则是一个链表,链表中保存了所有订阅这个channel的客户端。SUBSCRIBE命令的关键,就是将客户端添加给定channel的订阅链表中
  2. 通过PUBLISH命令向订阅者发送消息,redis-server会使用给定的频道作为键,在它所维护的channel字典中查找记录了订阅这个频道的所有客户端的链表,遍历这个链表,将消息发布给所有订阅者
  3. Pub/Sub从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到想应的消息

关于订阅,一般在关注、动态、聊天等系统使用较多

以上是关于Redis 学习笔记(十三)Redis订阅发布的主要内容,如果未能解决你的问题,请参考以下文章

Redis学习笔记8:Redis发布订阅(pub/sub)

Redis学习笔记8:Redis发布订阅(pub/sub)

Redis学习笔记07Redis命令之 发布订阅

StackExchange.Redis学习笔记 发布和订阅

Redis学习笔记—发布订阅

Redis学习笔记-发布/订阅