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

文档序号:30085016发布日期:2022-05-18 05:26阅读:278来源:国知局
一种基于redis实现消息实时性和持久化的方法及工具与流程

1.本发明涉及消息处理技术领域,具体的说是一种基于redis实现消息实时性和持久化的方法及工具。


背景技术:

2.随着互联网技术的不断,缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。
3.在高并发场景下,由于服务端来不及同步处理数量过多的请求,可能导致请求堵塞。例如,大量的insert、update之类的请求同时到达服务端,在执行这些请求的过程中,会出现大量的行锁、表锁,甚至到最后,由于请求堆积过多,触发“too many connections”错误。在这类高并发场景下,通常使用缓存与消息中间件,但是这会增大实施部署的难度,增加对服务器性能的要求。
4.redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足,在有些场景下,只是需要极个别功能的消息功能,不想再引用专业的消息中间件比如rabbitmq或者rocketmq,使用redis是一个不错的选择。
5.如果使用redis的发布订阅模式,由于redis的订阅发布模式不会持久化消息,如果消息接收方服务宕机了,消息发送方发送的消息就会丢失,会影响正常的业务运行。
6.如果使用set轮询方式,这种方式是利用缓存来实现模块间解耦的常见方式,消息发送方将要发送的消息存入redis,而消息接收方就会起一个线程不断的循环redis中的消息,如果有消息就处理,如果没有就等待1秒再次循环此过程。但这个方案的缺点也很明显,如果每次循环等待的时间过长,就会造成消息的延时,如果每次循环等待的时间过短,就会不断的调用redis轮询key值,如果这样的业务多了就会造成资源的浪费,影响性能。


技术实现要素:

7.本发明针对目前技术发展的需求和不足之处,提供一种基于redis实现消息实时性和持久化的方法及工具,以通过redis的发布订阅模式和set轮询相结合的方式,在不额外增加消息中间件的情况下,实现消息的实时性和持久性。
8.首先,本发明公开保护一种基于redis实现消息实时性和持久化的方法,解决上述技术问题采用的技术方案如下:
9.一种基于redis实现消息实时性和持久化的方法,该方法基于redis的发布订阅模式和set轮询方式,实现过程包括:
10.消息发布方利用redis的发布模式向redis发送消息,同时,向消息处理器发送一个消息标记;
11.消息处理器将消息标记发送至消息接收方;
12.消息接收方接收消息标记,利用redis的订阅模式接收消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
13.可选的,redis接收到来自消息发布方的消息后,将消息以key-value的形式进行存储。
14.可选的,消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
15.可选的,如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
16.其次,本发明公开保护一种基于redis实现消息实时性和持久化的工具,解决上述技术问题采用的技术方案如下:
17.一种基于redis实现消息实时性和持久化的工具,其实现涉及redis和消息处理器;
18.redis基于发布模式接收消息发布方发送的消息,基于订阅模式提醒消息接收方接收消息;
19.在redis接收消息发布方发送的消息时,消息处理器同时接收到该消息对应的消息标记,消息处理器将该消息标记发送至消息接收方;
20.消息接收方接收消息标记,同时收到来自的消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
21.可选的,redis接收到来自消息发布方的消息后,将消息以key-value的形式进行存储。
22.可选的,消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
23.可选的,如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
24.本发明的一种基于redis实现消息实时性和持久化的方法及工具,与现有技术相比具有的有益效果是:
25.(1)本发明通过redis的发布订阅模式和set轮询相结合的方式,在不额外增加消息中间件的情况下,实现消息的实时性和持久性;
26.(2)本发明利用redis的发布订阅模式,在消息的读取不基于轮询的方式去定时读取时,消息仍不会因消息接收方的宕机而丢失。
附图说明
27.附图1是本发明的实现过程流程图。
具体实施方式
28.为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具
体实施例,对本发明的技术方案进行清楚、完整的描述。
29.实施例一:
30.结合附图1,本实施例提出一种基于redis实现消息实时性和持久化的方法,该方法基于redis的发布订阅模式和set轮询方式,实现过程包括:
31.(1)消息发布方利用redis的发布模式向redis发送消息,消息以key-value的形式存储在redis中。
32.(2)消息发布方向redis发送消息时,向消息处理器发送一个消息标记。
33.(3)消息处理器将消息标记发送至消息接收方。
34.(4)消息接收方接收消息标记,利用redis的订阅模式接收消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
35.需要补充的是:
36.(i)消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
37.(ii)如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
38.实施例二:
39.结合附图1,本实施例提出一种基于redis实现消息实时性和持久化的工具,其实现涉及redis和消息处理器。
40.redis基于发布模式接收消息发布方发送的消息,基于订阅模式提醒消息接收方接收消息。
41.在redis接收消息发布方发送的消息时,消息以key-value的形式存储在redis中,消息处理器同时接收到该消息对应的消息标记,消息处理器将该消息标记发送至消息接收方。
42.消息接收方接收消息标记,同时收到来自的消息提醒,随后采用set轮询的方式去redis中获取未处理的消息,对获取消息进行消费,消费完成后,去redis中删除该消息。
43.需要补充的是:
44.(i)消息接收方接收消息标记,且未接收到redis的订阅提醒时,消息接收方也会去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费。
45.(ii)如果消息接收方去redis中获取消息时发生意外宕机,消息接收方重启服务后,会优先去redis中查询是否有未处理的消息,如果有,则对未处理的消息进行消费,不会出现消息丢失的情况。
46.综上可知,采用本发明的一种基于redis实现消息实时性和持久化的方法及工具,通过redis的发布订阅模式和set轮询相结合的方式,在不额外增加消息中间件的情况下,可以实现消息的实时性和持久性,解决消息因消息接收方宕机而出现丢失的问题。
47.以上应用具体个例对本发明的原理及实施方式进行了详细阐述,这些实施例只是用于帮助理解本发明的核心技术内容。基于本发明的上述具体实施例,本技术领域的技术人员在不脱离本发明原理的前提下,对本发明所作出的任何改进和修饰,皆应落入本发明
的专利保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1