CN114491338A - 一种基于redis实现消息实时性和持久化的方法及工具 - Google Patents
一种基于redis实现消息实时性和持久化的方法及工具 Download PDFInfo
- Publication number
- CN114491338A CN114491338A CN202210024169.5A CN202210024169A CN114491338A CN 114491338 A CN114491338 A CN 114491338A CN 202210024169 A CN202210024169 A CN 202210024169A CN 114491338 A CN114491338 A CN 114491338A
- Authority
- CN
- China
- Prior art keywords
- message
- redis
- receiver
- unprocessed
- receives
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开一种基于redis实现消息实时性和持久化的方法及工具,涉及消息处理技术领域,其实现涉及redis和消息处理器,具体过程包括:消息发布方利用redis的发布模式向redis发送消息,同时,向消息处理器发送一个消息标记;消息处理器将消息标记发送至消息接收方;消息接收方接收消息标记,利用redis的订阅模式接收消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息;如果消息接收方获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。本发明可以实现消息的实时性和持久性,无需额外增加消息中间件。
Description
技术领域
本发明涉及消息处理技术领域,具体的说是一种基于redis实现消息实时性和持久化的方法及工具。
背景技术
随着互联网技术的不断,缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。
在高并发场景下,由于服务端来不及同步处理数量过多的请求,可能导致请求堵塞。例如,大量的INSERT、UPDATE之类的请求同时到达服务端,在执行这些请求的过程中,会出现大量的行锁、表锁,甚至到最后,由于请求堆积过多,触发“too many connections”错误。在这类高并发场景下,通常使用缓存与消息中间件,但是这会增大实施部署的难度,增加对服务器性能的要求。
redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足,在有些场景下,只是需要极个别功能的消息功能,不想再引用专业的消息中间件比如rabbitMQ或者rocketMQ,使用redis是一个不错的选择。
如果使用redis的发布订阅模式,由于redis的订阅发布模式不会持久化消息,如果消息接收方服务宕机了,消息发送方发送的消息就会丢失,会影响正常的业务运行。
如果使用set轮询方式,这种方式是利用缓存来实现模块间解耦的常见方式,消息发送方将要发送的消息存入redis,而消息接收方就会起一个线程不断的循环redis中的消息,如果有消息就处理,如果没有就等待1秒再次循环此过程。但这个方案的缺点也很明显,如果每次循环等待的时间过长,就会造成消息的延时,如果每次循环等待的时间过短,就会不断的调用redis轮询key值,如果这样的业务多了就会造成资源的浪费,影响性能。
发明内容
本发明针对目前技术发展的需求和不足之处,提供一种基于redis实现消息实时性和持久化的方法及工具,以通过redis的发布订阅模式和set轮询相结合的方式,在不额外增加消息中间件的情况下,实现消息的实时性和持久性。
首先,本发明公开保护一种基于redis实现消息实时性和持久化的方法,解决上述技术问题采用的技术方案如下:
一种基于redis实现消息实时性和持久化的方法,该方法基于redis的发布订阅模式和set轮询方式,实现过程包括:
消息发布方利用redis的发布模式向redis发送消息,同时,向消息处理器发送一个消息标记;
消息处理器将消息标记发送至消息接收方;
消息接收方接收消息标记,利用redis的订阅模式接收消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
可选的,Redis接收到来自消息发布方的消息后,将消息以key-value的形式进行存储。
可选的,消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
可选的,如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
其次,本发明公开保护一种基于redis实现消息实时性和持久化的工具,解决上述技术问题采用的技术方案如下:
一种基于redis实现消息实时性和持久化的工具,其实现涉及redis和消息处理器;
redis基于发布模式接收消息发布方发送的消息,基于订阅模式提醒消息接收方接收消息;
在redis接收消息发布方发送的消息时,消息处理器同时接收到该消息对应的消息标记,消息处理器将该消息标记发送至消息接收方;
消息接收方接收消息标记,同时收到来自的消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
可选的,Redis接收到来自消息发布方的消息后,将消息以key-value的形式进行存储。
可选的,消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
可选的,如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
本发明的一种基于redis实现消息实时性和持久化的方法及工具,与现有技术相比具有的有益效果是:
(1)本发明通过redis的发布订阅模式和set轮询相结合的方式,在不额外增加消息中间件的情况下,实现消息的实时性和持久性;
(2)本发明利用redis的发布订阅模式,在消息的读取不基于轮询的方式去定时读取时,消息仍不会因消息接收方的宕机而丢失。
附图说明
附图1是本发明的实现过程流程图。
具体实施方式
为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清楚、完整的描述。
实施例一:
结合附图1,本实施例提出一种基于redis实现消息实时性和持久化的方法,该方法基于redis的发布订阅模式和set轮询方式,实现过程包括:
(1)消息发布方利用redis的发布模式向redis发送消息,消息以key-value的形式存储在redis中。
(2)消息发布方向redis发送消息时,向消息处理器发送一个消息标记。
(3)消息处理器将消息标记发送至消息接收方。
(4)消息接收方接收消息标记,利用redis的订阅模式接收消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
需要补充的是:
(i)消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
(ii)如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
实施例二:
结合附图1,本实施例提出一种基于redis实现消息实时性和持久化的工具,其实现涉及redis和消息处理器。
redis基于发布模式接收消息发布方发送的消息,基于订阅模式提醒消息接收方接收消息。
在redis接收消息发布方发送的消息时,消息以key-value的形式存储在redis中,消息处理器同时接收到该消息对应的消息标记,消息处理器将该消息标记发送至消息接收方。
消息接收方接收消息标记,同时收到来自的消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
需要补充的是:
(i)消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
(ii)如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
综上可知,采用本发明的一种基于redis实现消息实时性和持久化的方法及工具,通过redis的发布订阅模式和set轮询相结合的方式,在不额外增加消息中间件的情况下,可以实现消息的实时性和持久性,解决消息因消息接收方宕机而出现丢失的问题。
以上应用具体个例对本发明的原理及实施方式进行了详细阐述,这些实施例只是用于帮助理解本发明的核心技术内容。基于本发明的上述具体实施例,本技术领域的技术人员在不脱离本发明原理的前提下,对本发明所作出的任何改进和修饰,皆应落入本发明的专利保护范围。
Claims (8)
1.一种基于redis实现消息实时性和持久化的方法,其特征在于,该方法基于redis的发布订阅模式和set轮询方式,实现过程包括:
消息发布方利用redis的发布模式向redis发送消息,同时,向消息处理器发送一个消息标记;
消息处理器将消息标记发送至消息接收方;
消息接收方接收消息标记,利用redis的订阅模式接收消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
2.根据权利要求1所述的一种基于redis实现消息实时性和持久化的方法,其特征在于,Redis接收到来自消息发布方的消息后,将消息以key-value的形式进行存储。
3.根据权利要求1所述的一种基于redis实现消息实时性和持久化的方法,其特征在于,消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
4.根据权利要求1所述的一种基于redis实现消息实时性和持久化的方法,其特征在于,如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
5.一种基于redis实现消息实时性和持久化的工具,其特征在于,其实现涉及redis和消息处理器;
redis基于发布模式接收消息发布方发送的消息,基于订阅模式提醒消息接收方接收消息;
在redis接收消息发布方发送的消息时,消息处理器同时接收到该消息对应的消息标记,消息处理器将该消息标记发送至消息接收方;
消息接收方接收消息标记,同时收到来自的消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
6.根据权利要求5所述的一种基于redis实现消息实时性和持久化的工具,其特征在于,Redis接收到来自消息发布方的消息后,将消息以key-value的形式进行存储。
7.根据权利要求5所述的一种基于redis实现消息实时性和持久化的工具,其特征在于,消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
8.根据权利要求5所述的一种基于redis实现消息实时性和持久化的工具,其特征在于,如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210024169.5A CN114491338A (zh) | 2022-01-04 | 2022-01-04 | 一种基于redis实现消息实时性和持久化的方法及工具 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210024169.5A CN114491338A (zh) | 2022-01-04 | 2022-01-04 | 一种基于redis实现消息实时性和持久化的方法及工具 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114491338A true CN114491338A (zh) | 2022-05-13 |
Family
ID=81509266
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210024169.5A Pending CN114491338A (zh) | 2022-01-04 | 2022-01-04 | 一种基于redis实现消息实时性和持久化的方法及工具 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114491338A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242671A (zh) * | 2022-07-05 | 2022-10-25 | 中国电子科技集团公司第十四研究所 | 一种基于redis的消息监听方法 |
-
2022
- 2022-01-04 CN CN202210024169.5A patent/CN114491338A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242671A (zh) * | 2022-07-05 | 2022-10-25 | 中国电子科技集团公司第十四研究所 | 一种基于redis的消息监听方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9917913B2 (en) | Large message support for a publish-subscribe messaging system | |
CN107391271B (zh) | 一种基于消息队列系统的延时任务触发方法和装置 | |
CN110535787B (zh) | 消息消费方法、装置及可读存储介质 | |
US8516054B2 (en) | Message handling | |
US9667681B1 (en) | Systems and methods for providing messages to multiple subscribers | |
US8473681B2 (en) | Atomic-operation coalescing technique in multi-chip systems | |
US20170104696A1 (en) | Systems and methods for storing message data | |
CN107077390B (zh) | 一种任务处理方法以及网卡 | |
CN111949568B (zh) | 一种报文处理方法、装置及网络芯片 | |
CN107341062B (zh) | 一种数据推送方法、装置、设备以及存储介质 | |
WO2021104178A1 (zh) | 一种动态消息推送方法、系统和汽车诊断服务器 | |
JP2008033952A (ja) | 共通作業キュー環境における最適格サーバ | |
WO2016155238A1 (zh) | 一种分布式存储系统中的文件读取方法及服务端 | |
CN106960054B (zh) | 数据文件的存取方法及装置 | |
CN110851276A (zh) | 一种业务请求处理方法、装置、服务器和存储介质 | |
CN114491338A (zh) | 一种基于redis实现消息实时性和持久化的方法及工具 | |
WO2022211724A1 (en) | Method and apparatus for transmitting messages, and device and storage medium thereof | |
CN112527844A (zh) | 数据处理方法及装置、数据库架构 | |
CN110990363B (zh) | 一种分布式数据库多线程协同事务日志回放方法、系统 | |
EP3804233A1 (en) | Method and apparatus for performing communication in internet of things | |
WO2021008475A1 (zh) | 分布式数据库预处理方法及代理层、系统、存储介质 | |
CN109800184B (zh) | 针对小块输入的缓存方法、系统、装置及可存储介质 | |
CN116723166A (zh) | 一种消息推送的实现方法、装置及介质 | |
US8990332B2 (en) | Performance optimization of a publish operation | |
CN109005465B (zh) | 弹幕消息分发方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |