CN109800239B - 基于Redis的分布式架构数据共享方法 - Google Patents
基于Redis的分布式架构数据共享方法 Download PDFInfo
- Publication number
- CN109800239B CN109800239B CN201910036828.5A CN201910036828A CN109800239B CN 109800239 B CN109800239 B CN 109800239B CN 201910036828 A CN201910036828 A CN 201910036828A CN 109800239 B CN109800239 B CN 109800239B
- Authority
- CN
- China
- Prior art keywords
- data
- redis
- node
- memory
- subscription
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种基于Redis的分布式架构数据共享方法,涉及数据处理领域。本发明包括如下步骤:步骤S1、缓存数据初始化:分布式系统每个节点启动后将redis中的数据加载到各个节点的内存中;步骤S2、部署订阅监听:定义订阅回调方法,每个节点均订阅redis通道,并部署监听;步骤S3、数据同步:监测到数据变化后,更新每个节点的内存数据。本发明通过在分布式架构系统中使用redis作为缓存数据同步管理器,利用redis的发布和订阅机制来实时同步分布式多节点的缓存数据,从而实现多节点间的数据一致性,同时redis中的缓存数据可根据业务系统的实际需求进行自定义,并实现缓存数据可配置的发布和订阅功能,不受具体业务系统限制,灵活性强。
Description
技术领域
本发明属于数据处理技术领域,特别是涉及一种基于Redis的分布式架构数据共享方法。
背景技术
Redis是一个完全开源免费的高性能的key-value内存数据库。支持字符串(string)、列表(list)、集合(set)、哈希表(hash)等多种数据存储结构。Redis具有发布与订阅(pub/sub)的消息通信模式,因此可用于高速缓存、数据发布及订阅、高速消息队列等场景。
分布式领域的CAP理论:任何一个分布式系统都无法同时满足Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)这三个基本需求。在分布式架构中,采用多节点部署的方式来实现高可用,分区容错性是一个最基本的要求,如何在一致性和可用性之间平衡是分布式架构面临的主要难题。因此BASE理论应运而生,BASE理论是在基于CAP理论的基础上,通过大规模互联网系统分布式实践总结,对CAP理论中一致性和可用性权衡的结果,核心思想就是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
在实现数据一致性的具体解决过程中,衍生出数据一致性模型,分别是强一致性、弱一致性、最终一致性。其中,强一致性是指当更新操作完成后,任何多个后续操作的访问都会返回最新的更新后的值,强制每次获取到的数据都是最新的数据,确保数据的准确性,现有的实现方案有二阶段提交协议、三阶段提交协议、TCC协议、Paxos算法等。弱一致性是指当更新操作完成后,系统不保证后续操作的访问都会返回最新的更新过的值,也不会保证在多久之后能访问到最新的值,在实现上不采取数据一致性的补偿措施;最终一致性是弱一致性的特定形式,是指在没有后续更新操作的前提下,系统保证最终返回上一次更新操作的值,主要有消息队列实时触发数据补偿及定时任务触发数据补偿两种实现方案。现有的方案主要存在以下缺陷:
(1)二阶段提交协议是同步阻塞式,极大限制了分布式系统的性能,而且存在单点故障问题,没有设计较为完善的容错机制,任意一个节点的失败都会导致整个事务的失败;
(2)三阶段提交协议虽然解决了二阶段提交协议的阻塞问题和单点故障问题,但是引入了分区不一致时,会导致节点无法通信,影响数据的不一致性;
(3)TCC协议、Paxos算法等强一致性实现方案虽然能保证数据的强一致性,但并发时性能上会有很大的影响,在分布式系统中,强一致性往往不是最好的解决方案;
(4)消息队列触发的数据补偿方案,会受到消息队列本身的性能影响,一旦消息队列性能降低会导致数据不能实时同步,影响数据一致性;
(5)定时任务数据补偿方案,当定时时间间隔过小,会频繁进行数据同步操作,影响系统性能;当定时时间间隔过大,会导致数据同步延迟,影响数据一致性。
发明内容
本发明的目的在于提供一种基于Redis的分布式架构数据共享方法,通过在分布式架构系统中使用redis作为缓存数据同步管理器,利用redis的发布和订阅机制来实时同步分布式多节点的缓存数据,从而实现多节点间的数据一致性,解决了现有的节点数据不一致以及数据补偿影响系统性能的问题。
为解决上述技术问题,本发明是通过以下技术方案实现的:
本发明为一种基于Redis的分布式架构数据共享方法,包括如下步骤:
步骤S1、缓存数据初始化:分布式系统每个节点启动后将redis中的数据加载到各个节点的内存中;
步骤S2、部署订阅监听:定义订阅回调方法,每个节点均订阅redis通道,并部署监听;
步骤S3、数据同步:监测到数据变化后,更新每个节点的内存数据;
其中,步骤S2中,部署订阅监听的具体步骤如下:
步骤S21:定义回调方法,当有数据发布自动调用回调方法来处理订阅的数据;
步骤S22:当订阅数据发布时,将该数据添加内置消息队列中,同时轮询消息队列,有数据时就取出消息队列中的数据进行处理;
步骤S23:利用redis的数据订阅方法,订阅配置的redis通道,并在定义的回调方法上进行监听;
步骤S24:部署订阅监听结束,每个节点都部署了redis通道的订阅,并设置了监听;
其中,步骤S3中,具体的数据同步方法包括如下步骤:
步骤S31:当与节点内存中缓存数据关联的应用系统的数据进行增删改时,先将数据更新到redis中;
步骤S32:利用redis的数据发布方法,向配置的redis通道发布数据;
步骤S33:步骤S23中的每个节点会监听到该数据发布,并调用定义的回调方法,在回调方法中将数据添加到内置消息队列中;
步骤S34:内置消息队列监听到队列中有数据,取出队列中的数据,并从redis中获取最新数据,更新节点中对应的内存数据;
步骤S35:执行节点内存数据变化的监听方法;
步骤S36:数据同步结束。
优选地,所述步骤S1中,缓存数据初始化的具体步骤如下:
步骤S11:根据系统业务需求,确定需要加载到内存中的业务数据;
步骤S12:分布式节点启动后,先加载配置参数,再根据配置的redis地址初始化redis的连接池;
步骤S13:从redis连接池中获取一个redis的连接实例,并根据配置的redis的key前缀进行正则匹配查询出redis中所有匹配的key列表;
步骤S14:遍历key列表并从redis中获取数据,将获取到的实体对象数据保存到节点的内存中;
步骤S15:执行节点内存数据变化的监听方法;
步骤S16:缓存数据初始化完成,每个节点启动后在内存中都保存一份redis的数据镜像。
优选地,所述步骤S12中,加载的配置参数包括:redis中key的前缀、redis通道名称、redis连接地址、订阅及发布的实体类型。
本发明具有以下有益效果:
(1)本发明通过在CAP理论及BASE理论的指导下,结合分布式系统的业务特点,采用基于redis的方式来达到分布式系统数据的最终一致性,具有理论和实际的基础。
(2)本发明通过利用redis的发布和订阅机制,在分布式架构系统中每个节点订阅同一通道内的数据,当数据发生变化时,redis发布数据变化,订阅该通道的每个节点能实时获取数据变化并更新数据,保持每个节点间的数据一致性,保证了分布式架构系统的性能和数据的一致性,提高了数据的访问速度。
(3)本发明在redis中的缓存数据可根据业务系统的实际需求进行自定义,并实现缓存数据可配置的发布和订阅功能,不受具体业务系统限制,灵活性强。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一种基于Redis的分布式架构数据共享方法的流程图;
图2为缓存数据初始化具体流程图;
图3为部署订阅监听具体流程图;
图4为数据同步具体流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1所示,本发明为一种基于Redis的分布式架构数据共享方法,包括如下步骤:
步骤S1、缓存数据初始化:分布式系统每个节点启动后将redis中的数据加载到各个节点的内存中;
步骤S2、部署订阅监听:定义订阅回调方法,每个节点均订阅redis通道,并部署监听;
步骤S3、数据同步:当监测到数据变化后,更新每个节点的内存数据,保持数据的一致性;
请参阅图3所示,步骤S2中,部署订阅监听的具体步骤如下:
步骤S21:定义回调方法,当有数据发布自动调用回调方法来处理订阅的数据;
步骤S22:在回调方法中,为了解耦不同订阅数据的处理逻辑,采用内置消息队列的方式,当订阅数据发布时,将该数据添加内置消息队列中,同时轮询消息队列,有数据时就取出消息队列中的数据进行处理;
步骤S23:利用redis的数据订阅方法,订阅配置的redis通道,并在定义的回调方法上进行监听;
步骤S24:部署订阅监听结束,每个节点都部署了redis通道的订阅,并设置了监听;
请参阅图4所示,步骤S3中,具体的数据同步方法包括如下步骤:
步骤S31:当与节点内存中缓存数据关联的应用系统的数据进行增删改操作时,需要对每个节点的内存数据进行更新同步,先将数据更新到redis中;
步骤S32:redis中数据更新完成后,利用redis的数据发布方法,向配置的redis通道发布数据;
步骤S33:步骤S23中的每个节点会监听到该数据发布,并调用定义的回调方法,在回调方法中将数据添加到内置消息队列中;
步骤S34:内置消息队列监听到队列中有数据,取出队列中的数据,并从redis中获取最新数据,更新节点中对应的内存数据;
步骤S35:执行节点内存数据变化的监听方法;
步骤S36:数据同步结束,当数据发生变化时,每个节点中内存数据能实现更新,保持数据一致性。
请参阅图2所示,步骤S1中,缓存数据初始化的具体步骤如下:
步骤S11:根据系统业务需求,确定系统有哪些常用的业务数据需要进行缓存,确定需要加载到内存中的业务数据;
步骤S12:分布式节点启动后,先加载配置参数,再根据配置的redis地址初始化redis的连接池;
步骤S13:从redis连接池中获取一个redis的连接实例,并根据配置的redis的key前缀进行正则匹配查询出redis中所有匹配的key列表;
步骤S14:遍历key列表并从redis中获取数据,将获取到的实体对象数据保存到节点的内存中;
步骤S15:执行节点内存数据变化的监听方法,如实体对象属性变化需要重新加载实体bean,数据库连接属性变化需要重新创建数据库连接等;
步骤S16:缓存数据初始化完成,每个节点启动后在内存中都保存一份redis的数据镜像。
其中,步骤S12中,加载的配置参数包括:redis中key的前缀、redis通道名称、redis连接地址、订阅及发布的实体类型等等。
值得注意的是,上述系统实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。
Claims (2)
1.一种基于Redis的分布式架构数据共享方法,其特征在于,包括如下步骤:
步骤S1、缓存数据初始化:分布式系统每个节点启动后将redis中的数据加载到各个节点的内存中;
步骤S2、部署订阅监听:定义订阅回调方法,每个节点均订阅redis通道,并部署监听;
步骤S3、数据同步:监测到数据变化后,更新每个节点的内存数据;
其中,步骤S2中,部署订阅监听的具体步骤如下:
步骤S21:定义回调方法,当有数据发布自动调用回调方法来处理订阅的数据;
步骤S22:当订阅数据发布时,将该数据添加内置消息队列中,同时轮询消息队列,有数据时就取出消息队列中的数据进行处理;
步骤S23:利用redis的数据订阅方法,订阅配置的redis通道,并在定义的回调方法上进行监听;
步骤S24:部署订阅监听结束,每个节点都部署了redis通道的订阅,并设置了监听;
其中,步骤S3中,具体的数据同步方法包括如下步骤:
步骤S31:当与节点内存中缓存数据关联的应用系统的数据进行增删改时,先将数据更新到redis中;
步骤S32:利用redis的数据发布方法,向配置的redis通道发布数据;
步骤S33:步骤S23中的每个节点会监听到该数据发布,并调用定义的回调方法,在回调方法中将数据添加到内置消息队列中;
步骤S34:内置消息队列监听到队列中有数据,取出队列中的数据,并从redis中获取最新数据,更新节点中对应的内存数据;
步骤S35:执行节点内存数据变化的监听方法;
步骤S36:数据同步结束;
其中,步骤S1中,缓存数据初始化的具体步骤如下:
步骤S11:根据系统业务需求,确定需要加载到内存中的业务数据;
步骤S12:分布式节点启动后,先加载配置参数,再根据配置的redis地址初始化redis的连接池;
步骤S13:从redis连接池中获取一个redis的连接实例,并根据配置的redis的key前缀进行正则匹配查询出redis中所有匹配的key列表;
步骤S14:遍历key列表并从redis中获取数据,将获取到的实体对象数据保存到节点的内存中;
步骤S15:执行节点内存数据变化的监听方法;
步骤S16:缓存数据初始化完成,每个节点启动后在内存中都保存一份redis的数据镜像。
2.根据权利要求1所述的一种基于Redis的分布式架构数据共享方法,其特征在于,所述步骤S12中,加载的配置参数包括:redis中key的前缀、redis通道名称、redis连接地址、订阅及发布的实体类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910036828.5A CN109800239B (zh) | 2019-01-15 | 2019-01-15 | 基于Redis的分布式架构数据共享方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910036828.5A CN109800239B (zh) | 2019-01-15 | 2019-01-15 | 基于Redis的分布式架构数据共享方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109800239A CN109800239A (zh) | 2019-05-24 |
CN109800239B true CN109800239B (zh) | 2022-09-06 |
Family
ID=66559372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910036828.5A Active CN109800239B (zh) | 2019-01-15 | 2019-01-15 | 基于Redis的分布式架构数据共享方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109800239B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111080500A (zh) * | 2019-11-26 | 2020-04-28 | 武汉烽火众智数字技术有限责任公司 | 基于spark streaming的实时规则的布控预警方法及装置 |
CN110968439B (zh) * | 2019-11-28 | 2020-12-15 | 蜂助手股份有限公司 | 系统间的消息通知方法、装置、服务器、系统及存储介质 |
CN111194012A (zh) * | 2019-12-30 | 2020-05-22 | 广东飞企互联科技股份有限公司 | 一种基于redis的定时超时业务的开发过程及其处理方法 |
CN111787055B (zh) * | 2020-05-22 | 2021-07-27 | 中国科学院信息工程研究所 | 一种基于Redis且面向事务机制和多数据中心的数据分发方法和系统 |
CN111866170B (zh) * | 2020-07-30 | 2023-08-08 | 小视科技(江苏)股份有限公司 | Iot集群内发送同步消息的方法 |
CN111984663B (zh) * | 2020-08-21 | 2024-03-12 | 西安寰宇卫星测控与数据应用有限公司 | Redis数据库更新方法、装置、计算机设备、存储介质 |
CN111966756B (zh) * | 2020-08-21 | 2024-03-12 | 西安寰宇卫星测控与数据应用有限公司 | 表格数据自动同步方法、装置、计算机设备、存储介质 |
CN111988427A (zh) * | 2020-08-31 | 2020-11-24 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种基于分布式的本地缓存处理方法及系统 |
CN112187896A (zh) * | 2020-09-18 | 2021-01-05 | 成都精灵云科技有限公司 | 支持改动实时通知和数据实时同步的缓存系统及方法 |
CN112416955B (zh) * | 2020-11-18 | 2022-02-22 | 四川长虹电器股份有限公司 | 基于高并发环境的缓存一致性问题解决方法 |
CN112286950A (zh) * | 2020-11-20 | 2021-01-29 | 四川长虹电器股份有限公司 | 一种分布式缓存中保持有效数据一致性的方法 |
CN112597197B (zh) * | 2020-12-17 | 2022-07-26 | 杭州当虹科技股份有限公司 | 一种基于内存的分布式缓存系统 |
CN114116200B (zh) * | 2021-10-27 | 2024-04-05 | 北京百度网讯科技有限公司 | 资源共享方法、服务创建方法、装置和电子设备 |
CN114500655B (zh) * | 2022-04-15 | 2022-07-26 | 武汉中科通达高新技术股份有限公司 | 接口请求处理方法、装置、微服务框架的集群系统及介质 |
CN115242671A (zh) * | 2022-07-05 | 2022-10-25 | 中国电子科技集团公司第十四研究所 | 一种基于redis的消息监听方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101373509A (zh) * | 2008-10-10 | 2009-02-25 | 华南理工大学 | 一种基于分布式ale的rfid中间件 |
CN102880475A (zh) * | 2012-10-23 | 2013-01-16 | 上海普元信息技术股份有限公司 | 计算机软件系统中基于云计算的实时事件处理系统及方法 |
CN105677916A (zh) * | 2016-03-02 | 2016-06-15 | 浪潮软件集团有限公司 | 一种关于Redis使用的方法 |
CN108418894A (zh) * | 2018-03-26 | 2018-08-17 | 威创软件南京有限公司 | 一种基于push技术的分布式数据同步方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10417254B2 (en) * | 2016-02-01 | 2019-09-17 | Vmware, Inc. | Intelligent content synchronization between content libraries |
US10082983B2 (en) * | 2016-04-05 | 2018-09-25 | International Business Machines Corporation | Monitoring storage systems |
-
2019
- 2019-01-15 CN CN201910036828.5A patent/CN109800239B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101373509A (zh) * | 2008-10-10 | 2009-02-25 | 华南理工大学 | 一种基于分布式ale的rfid中间件 |
CN102880475A (zh) * | 2012-10-23 | 2013-01-16 | 上海普元信息技术股份有限公司 | 计算机软件系统中基于云计算的实时事件处理系统及方法 |
CN105677916A (zh) * | 2016-03-02 | 2016-06-15 | 浪潮软件集团有限公司 | 一种关于Redis使用的方法 |
CN108418894A (zh) * | 2018-03-26 | 2018-08-17 | 威创软件南京有限公司 | 一种基于push技术的分布式数据同步方法 |
Non-Patent Citations (4)
Title |
---|
A Distributed Redis Framework for Use in the UCWW;Zhanlin Ji etc.;《2014 International Conference on Cyber-Enabled Distributed Computing and Knowledge Discovery》;20141215;第241-244页 * |
Redis可扩展与高效复制方案的设计与实现;李法平 等;《西南师范大学学报(自然科学版)》;20180331;第83-89页 * |
Towards Scalable and Reliable In-Memory Storage System: A Case Study with Redis;Shanshan Chen etc.;《 2016 IEEE Trustcom/BigDataSE/ISPA》;20170209;第1660-1666页 * |
基于MySQL Binlog的数据增量同步系统的设计与实现;苏子权;《中国优秀硕士学位论文全文数据库(信息科技辑)》;20181015;第I138-203页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109800239A (zh) | 2019-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109800239B (zh) | 基于Redis的分布式架构数据共享方法 | |
CN109815248B (zh) | 一种基于Zookeeper的分布式架构数据一致性方法 | |
CN106878376B (zh) | 一种配置管理方法与系统 | |
US9239767B2 (en) | Selective database replication | |
US10979286B2 (en) | Method, device and computer program product for managing distributed system | |
US8676914B2 (en) | Synchronizing services across network nodes | |
CN112019369A (zh) | 一种微服务框架下动态配置管理方法及系统 | |
CN108255592B (zh) | 一种Quartz集群定时任务处理系统及方法 | |
US9367261B2 (en) | Computer system, data management method and data management program | |
US11228664B2 (en) | Method and apparatus for acquiring RPC member information, electronic device and storage medium | |
CN108829720B (zh) | 数据处理方法及装置 | |
WO2022134797A1 (zh) | 一种数据分片存储方法、装置、计算机设备和存储介质 | |
CN103973725A (zh) | 一种分布式协同方法和协同器 | |
CN104679796A (zh) | 一种选举方法、装置及数据库镜像集群节点 | |
CN107203429A (zh) | 一种基于分布式锁加载分布式任务的方法以及装置 | |
CN108566291A (zh) | 一种事件处理的方法、服务器及系统 | |
CN111694865A (zh) | 基于分布式系统的四层结构数据获取方法和装置 | |
CN106657433B (zh) | 一种多网卡环境下物理网卡的命名方法和装置 | |
CN115190103A (zh) | 基于服务网格的服务域名解析方法、装置及设备 | |
US9602615B2 (en) | Masterless cache replication | |
CN110022257A (zh) | 分布式消息系统 | |
WO2022033291A1 (zh) | 榜单服务系统、榜单生成方法、服务器及存储介质 | |
CN116346834A (zh) | 一种会话同步方法、装置、计算设备及计算机存储介质 | |
CN115189931A (zh) | 一种分布式密钥管理方法、装置、设备、存储介质 | |
CN113900728A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20190524 Assignee: Kedaduochuang cloud Technology Co.,Ltd. Assignor: USTC SINOVATE SOFTWARE CO.,LTD. Contract record no.: X2023980034512 Denomination of invention: Redis based distributed architecture data sharing method Granted publication date: 20220906 License type: Common License Record date: 20230407 |
|
EE01 | Entry into force of recordation of patent licensing contract |