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

Redis客户端可以订阅任意数量的频道! ②发布订阅的实现:

1、订阅端: 127.0.0.1:6379> ping PONG 127.0.0.1:6379> SUBSCRIBE dingdada #订阅名字为 dingdada 的频道 Reading messages… (press Ctrl-C to quit)

“subscribe”“dingdada”(integer) 1 #等待推送的信息“message” #消息“dingdada” #来自哪个频道的消息“hello world\xef\xbc\x81” # 消息的具体内容“message”“dingdada”“my name is dyj\x81” 复制代码 2、发送端: 127.0.0.1:6379> ping PONG 127.0.0.1:6379> PUBLISH dingdada “hello world!” #发送消息到dingdada 频道 (integer) 1 127.0.0.1:6379> PUBLISH dingdada “my name is dyj” #发送消息到dingdada 频道 (integer) 1 复制代码 在这里插入图片描述

③PSUBSCRIBE 命令:订阅指定频道!

PSUBSCRIBE + 频道。。 #订阅给定的模式,可多个 复制代码 在这里插入图片描述 ④PUBLISH 命令:发送消息至指定频道! PUBLISH + 频道 +消息 #将信息 message 发送到指定的频道 channel 复制代码 Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。 这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能 二、使用Jedis操作Redis 百度的概念性解答我就不贴了,简单来说,Jedis是Redis官方推荐的Java连接开发工具!

虽然现在的SpringBoot2.×版本已经将Jedis换成了Lettuce,但是我觉得还是有必要了解一下Jedis的使用!

如何在java项目中整合Jedis并且连接Redis数据库? ①创建一个Maven项目

空的即可~怎么创建我就不赘述了! ②导入Jedis和fastjson依赖,耐心等待下载完成!

redis.clients jedis 3.2.0

com.alibaba fastjson 1.2.62 复制代码 ③连接Redis测试,此处为了方便测试,连接的是本地的Redis服务,连接远程需要更改配置文件和关闭防火墙,以后会单独弄一篇文章来介绍这个! // 1、 new Jedis 对象即可 Jedis jedis = new Jedis("127.0.0.1",6379); // jedis 所有的命令就是我们之前的所有指令 System.out.println(jedis.ping()); 复制代码![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/354dcdf347f54186aee462044b8c4093.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f796c7f2a79a45e1bb504ecb791e16a7.png) Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分:发布者(Publisher),订阅者(Subscriber)和频道(Channel)。发布/订阅者模式最大的特点就是实现了松耦合。 Redis发布订阅分类频道的发布订阅模式的发布订阅下面来分别详细阐述一下其实现原理及应用。频道的发布订阅实现原理Redis将所有频道的订阅关系都保存在服务器状态的 pubsub_channels 字典,字典的键是某个被订阅的频道,而对应值则是一个链表,链表里记录了所有订阅这个频道的客户端。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fdb6b251c39449e7bba0cdb2a96ca9a8.png)client-1、client-2、client-3 三个客户端正在订阅 “article.tech” 频道客户端 client-4 正在订阅 “article.mysql” 频道client-5、client-6 两个客户端正在订阅 “article.redis” 频道 订阅频道相关命令:SUBSCRIBE channel [channel …]当客户端执行SUBSCRIBE命令订阅某个或某些频道的时候,这个客户端与被订阅频道之间就建立起了一种订阅关系。建立订阅关系执行分两种情况: 1)该频道已有其他订阅者该频道在 pubsub_channels 字典中存在订阅者链表,将此客户端添加至订阅者链表末尾即可; 2)该频道暂无订阅者该频道在 pubsub_channels 字典中不存在订阅者链表,**首先在字典中为频道创建一个键**,并将这个键的值设置为空链表,然后将客户端添加到链表,成为链表的第一个元素。

客户端client-10086 执行命令: SUBSCRIBE “article.mysql” “article.java” 执行SUBSCRIBE命令之后的 pubsub_channels 字典: 是长连接,但并不可靠,订阅的时候就代表建立了一个长连接,客户端的订阅者想要接收消息,肯定也会维护长连接。如果某个订阅者掉线了,后面即使上线了,这掉线期间的消息也无法重新接收到。

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: