CN114491338A - 一种基于redis实现消息实时性和持久化的方法及工具 - Google Patents

一种基于redis实现消息实时性和持久化的方法及工具 Download PDF

Info

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
Application number
CN202210024169.5A
Other languages
English (en)
Inventor
李敏
迟钰沛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Software Co Ltd
Original Assignee
Inspur Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Software Co Ltd filed Critical Inspur Software Co Ltd
Priority to CN202210024169.5A priority Critical patent/CN114491338A/zh
Publication of CN114491338A publication Critical patent/CN114491338A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query 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实现消息实时性和持久化的方法及工具
技术领域
本发明涉及消息处理技术领域,具体的说是一种基于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中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
CN202210024169.5A 2022-01-04 2022-01-04 一种基于redis实现消息实时性和持久化的方法及工具 Pending CN114491338A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115242671A (zh) * 2022-07-05 2022-10-25 中国电子科技集团公司第十四研究所 一种基于redis的消息监听方法

Cited By (1)

* Cited by examiner, † Cited by third party
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