CN112256443B - 一种基于redis的动态集群锁系统 - Google Patents
一种基于redis的动态集群锁系统 Download PDFInfo
- Publication number
- CN112256443B CN112256443B CN202011097234.4A CN202011097234A CN112256443B CN 112256443 B CN112256443 B CN 112256443B CN 202011097234 A CN202011097234 A CN 202011097234A CN 112256443 B CN112256443 B CN 112256443B
- Authority
- CN
- China
- Prior art keywords
- module
- resource
- redis
- daemon
- locking
- 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
- 238000000034 method Methods 0.000 claims abstract description 19
- 230000003111 delayed effect Effects 0.000 claims description 5
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000008278 dynamic mechanism Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/52—Indexing scheme relating to G06F9/52
- G06F2209/522—Manager
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于redis的动态集群锁系统。它包括定义模块、加锁模块、守护模块、计算模块、业务执行模块、释放守护模块、解锁模块,定义模块用于在内存中声明被锁资源的唯一标识集合;加锁模块用于使用redis提供的setnx原子方法对定义模块声明的资源唯一标识进行设置锁时间;守护模块用于启用延迟线程监听加锁模块中被锁资源的使用情况;计算模块用于通过对资源锁的时间及资源集合进行临界值计算,到期后通知加锁模块;业务执行模块用于业务逻辑执行;释放守护模块用于在业务执行模块结束后对守护模块的延迟线程的释放;解锁模块用于把该资源的标识从redis中剔除。本发明的有益效果是:对锁进行动态管控,让被锁资源能够被其他服务正常使用。
Description
技术领域
本发明涉及数据处理相关技术领域,尤其是指一种基于redis的动态集群锁系统。
背景技术
由于目前微服务集群化,但是资源比如文件、视频等只存在一份,如果每个服务都要来获取相关资源会造成数据混乱;如果单纯使用锁机制且无动态机制的话,会造成持锁的服务由于部分原因停止服务而导致其对应的资源被锁住。目前业界大部分使用的集群锁没有对锁进行动态管控。
发明内容
本发明是为了克服现有技术中存在上述的不足,提供了一种能够对锁进行动态管控的基于redis的动态集群锁系统。
为了实现上述目的,本发明采用以下技术方案:
一种基于redis的动态集群锁系统,包括定义模块、加锁模块、守护模块、计算模块、业务执行模块、释放守护模块、解锁模块,所述的定义模块用于在内存中声明被锁资源的唯一标识集合,与加锁模块连接;所述的加锁模块用于使用redis提供的setnx原子方法对定义模块声明的资源唯一标识进行设置锁时间,分别与守护模块、计算模块、业务执行模块连接;所述的守护模块用于启用延迟线程监听加锁模块中被锁资源的使用情况,与计算模块连接;所述的计算模块用于通过对资源锁的时间及资源集合进行临界值计算,到期后通知加锁模块;所述的业务执行模块用于业务逻辑执行,分别与释放守护模块、解锁模块连接;所述的释放守护模块用于在业务执行模块结束后对守护模块的延迟线程的释放;所述的解锁模块用于把该资源的标识从redis中剔除。
本发明公开了一种基于redis的动态集群锁方案,包括定义模块、加锁模块、守护模块、计算模块、业务执行模块、释放守护模块、解锁模块,通过基于redis的动态集群锁,能够对锁进行动态管控,从而保证集群下使用锁的服务在宕机、停止服务时可以自动释放所持的锁,让被锁资源能够被其他服务正常使用。
作为优选,所述的定义模块中,被锁资源的唯一标识集合必须为线程安全,即多线程读写一致,使用java线程安全集合进行定义,值定义为资源唯一标识。
作为优选,所述的加锁模块中,由于redis提供的setnx方法为原子操作,因此可用于集群下的锁管理,setnx流程是设置一个值到redis,如果redis已经有了则设置失败,反之成功,利用该原理通过setnx设置资源的唯一标识,如果失败说明被别的服务使用,则放弃本次业务操作,如果成功需要设置过期时间即过期后该资源唯一标识从redis中自动剔除,过期时间设置为服务启动耗时时间,是为了方便服务重启后锁的时间刚好到期。
作为优选,所述的守护模块中,加锁模块成功后,启动一个延迟异步线程,该线程持续对该资源在redis中的过期时间进行变更。
作为优选,所述的计算模块中,根据资源锁的时间乘以85%得到延迟时间,用于守护模块创建的延迟线程的开始执行时间,剩余15%的时间是预留给操作redis耗时时间;延迟开始执行前需要获取定义模块中的资源锁集合,判断集合中是否有该资源锁,只有存在才会执行加锁模块。
作为优选,所述的业务执行模块中,根据具体的业务逻辑执行相应操作,因为计算模块已经完成了动态加锁的流程,业务未执行完成前,该锁一直在。
作为优选,所述的释放守护模块中,从定义模块中的资源唯一标识集合中剔除该资源标识,剔除后由于计算模块内部有判断逻辑,因此守护模块自动消失。
本发明的有益效果是:通过基于redis的动态集群锁,能够对锁进行动态管控,从而保证集群下使用锁的服务在宕机、停止服务时可以自动释放所持的锁,让被锁资源能够被其他服务正常使用。
附图说明
图1是本发明的系统流程框图。
图中:1.定义模块,2.加锁模块,3.守护模块,4.计算模块,5.业务执行模块,6.释放守护模块,7.解锁模块。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步的描述。
如图1所述的实施例中,一种基于redis的动态集群锁系统,包括定义模块1、加锁模块2、守护模块3、计算模块4、业务执行模块5、释放守护模块6、解锁模块7,
定义模块1用于在内存中声明被锁资源的唯一标识集合,与加锁模块2连接;被锁资源的唯一标识集合必须为线程安全,即多线程读写一致,使用java线程安全集合进行定义:CopyOnWriteArraySet<String>,值定义为资源唯一标识,建议使用资源的md5值。
加锁模块2用于使用redis提供的setnx原子方法对定义模块1声明的资源唯一标识进行设置锁时间,分别与守护模块3、计算模块4、业务执行模块5连接;由于redis提供的setnx方法为原子操作,因此可用于集群下的锁管理,setnx流程是设置一个值到redis,如果redis已经有了则设置失败,反之成功,利用该原理通过setnx设置资源的唯一标识,如果失败说明被别的服务使用,则放弃本次业务操作,如果成功需要设置过期时间即过期后该资源唯一标识从redis中自动剔除,过期时间设置为服务启动耗时时间,是为了方便服务重启后锁的时间刚好到期,为后续加锁提供便利。
守护模块3用于启用延迟线程监听加锁模块2中被锁资源的使用情况,与计算模块4连接;加锁模块2成功后,启动一个延迟异步线程,该线程持续对该资源在redis中的过期时间进行变更,可参考java中java.util.Timer::schedule方法来实现延迟,其他可实现延迟的方案均可,目的是为了延迟执行。
计算模块4用于通过对资源锁的时间及资源集合进行临界值计算,到期后通知加锁模块2;根据资源锁的时间乘以85%得到延迟时间,用于守护模块3创建的延迟线程的开始执行时间,剩余15%的时间是预留给操作redis耗时时间;延迟开始执行前需要获取定义模块1中的资源锁集合,判断集合中是否有该资源锁,只有存在才会执行加锁模块2。
业务执行模块5用于业务逻辑执行,无需关心集群锁的逻辑,分别与释放守护模块6、解锁模块7连接;根据具体的业务逻辑执行相应操作,此时无需关心业务执行耗时及锁的时间,因为计算模块4已经完成了动态加锁的流程,业务未执行完成前,该锁一直在。
释放守护模块6用于在业务执行模块5结束后对守护模块3的延迟线程的释放;从定义模块1中的资源唯一标识集合中剔除该资源标识,剔除后由于计算模块4内部有判断逻辑,因此守护模块3自动消失。
解锁模块7用于把该资源的标识从redis中剔除。
上述系统已应用于平台的数据统计模块中,在文件解析耗时较久的情况下能够保证锁的动态化,不会造成服务异常后该文件在一定时间内无法被集群中的其他服务解析。本发明公开了一种基于redis的动态集群锁方案,包括定义模块1、加锁模块2、守护模块3、计算模块4、业务执行模块5、释放守护模块6、解锁模块7,通过基于redis的动态集群锁,能够对锁进行动态管控,从而保证集群下使用锁的服务在宕机、停止服务时可以自动释放所持的锁,让被锁资源能够被其他服务正常使用。
java版本伪代码示例:
Claims (6)
1.一种基于redis的动态集群锁系统,其特征是,包括定义模块(1)、加锁模块(2)、守护模块(3)、计算模块(4)、业务执行模块(5)、释放守护模块(6)、解锁模块(7),所述的定义模块(1)用于在内存中声明被锁资源的唯一标识集合,与加锁模块(2)连接;所述的加锁模块(2)用于使用redis提供的setnx原子方法对定义模块(1)声明的资源唯一标识进行设置锁时间,分别与守护模块(3)、计算模块(4)、业务执行模块(5)连接;所述的守护模块(3)用于启用延迟线程监听加锁模块(2)中被锁资源的使用情况,与计算模块(4)连接;所述的计算模块(4)用于通过对资源锁的时间及资源集合进行临界值计算,到期后通知加锁模块(2);所述的业务执行模块(5)用于业务逻辑执行,分别与释放守护模块(6)、解锁模块(7)连接;所述的释放守护模块(6)用于在业务执行模块(5)结束后对守护模块(3)的延迟线程的释放;所述的解锁模块(7)用于把该资源的标识从redis中剔除;所述的加锁模块(2)中,由于redis提供的setnx方法为原子操作,因此可用于集群下的锁管理,setnx流程是设置一个值到redis,如果redis已经有了则设置失败,反之成功,利用该原理通过setnx设置资源的唯一标识,如果失败说明被别的服务使用,则放弃本次业务操作,如果成功需要设置过期时间即过期后资源的唯一标识从redis中自动剔除,过期时间设置为服务启动耗时时间,是为了方便服务重启后锁的时间刚好到期。
2.根据权利要求1所述的一种基于redis的动态集群锁系统,其特征是,所述的定义模块(1)中,被锁资源的唯一标识集合必须为线程安全,即多线程读写一致,使用java线程安全集合进行定义,值定义为资源唯一标识。
3.根据权利要求1所述的一种基于redis的动态集群锁系统,其特征是,所述的守护模块(3)中,加锁模块(2)成功后,启动一个延迟异步线程,该线程持续对该资源在redis中的过期时间进行变更。
4.根据权利要求1所述的一种基于redis的动态集群锁系统,其特征是,所述的计算模块(4)中,根据资源锁的时间乘以85%得到延迟时间,用于守护模块(3)创建的延迟线程的开始执行时间,剩余15%的时间是预留给操作redis耗时时间;延迟开始执行前需要获取定义模块(1)中的资源锁集合,判断集合中是否有该资源锁,只有存在才会执行加锁模块(2)。
5.根据权利要求1所述的一种基于redis的动态集群锁系统,其特征是,所述的业务执行模块(5)中,根据具体的业务逻辑执行相应操作,因为计算模块(4)已经完成了动态加锁的流程,业务未执行完成前,该锁一直在。
6.根据权利要求1所述的一种基于redis的动态集群锁系统,其特征是,所述的释放守护模块(6)中,从定义模块(1)中的资源唯一标识集合中释放资源唯一标识,释放后由于计算模块(4)内部有判断逻辑,因此守护模块(3)自动消失。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011097234.4A CN112256443B (zh) | 2020-10-14 | 2020-10-14 | 一种基于redis的动态集群锁系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011097234.4A CN112256443B (zh) | 2020-10-14 | 2020-10-14 | 一种基于redis的动态集群锁系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112256443A CN112256443A (zh) | 2021-01-22 |
CN112256443B true CN112256443B (zh) | 2024-02-06 |
Family
ID=74242503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011097234.4A Active CN112256443B (zh) | 2020-10-14 | 2020-10-14 | 一种基于redis的动态集群锁系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112256443B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115801864B (zh) * | 2022-10-25 | 2024-06-04 | 苏州浪潮智能科技有限公司 | 一种资源锁定时间的控制方法、系统、装置及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5612865A (en) * | 1995-06-01 | 1997-03-18 | Ncr Corporation | Dynamic hashing method for optimal distribution of locks within a clustered system |
US6003075A (en) * | 1997-07-07 | 1999-12-14 | International Business Machines Corporation | Enqueuing a configuration change in a network cluster and restore a prior configuration in a back up storage in reverse sequence ordered |
CN102339283A (zh) * | 2010-07-20 | 2012-02-01 | 中兴通讯股份有限公司 | 集群文件系统访问控制方法及集群节点 |
CN104820622A (zh) * | 2015-05-22 | 2015-08-05 | 上海斐讯数据通信技术有限公司 | 一种共享内存锁管理控制方法及系统 |
CN106354565A (zh) * | 2016-09-21 | 2017-01-25 | 努比亚技术有限公司 | 一种分布式锁客户端及控制方法 |
CN106657258A (zh) * | 2016-11-04 | 2017-05-10 | 成都视达科信息技术有限公司 | 一种基于nginx+lua的安全加速中间件实现方法及装置 |
CN109525658A (zh) * | 2018-11-09 | 2019-03-26 | 广州虎牙科技有限公司 | 一种产号方法、服务器、设备、存储介质和业务系统 |
CN109743366A (zh) * | 2018-12-21 | 2019-05-10 | 苏宁易购集团股份有限公司 | 一种用于多活场景的资源加锁方法、装置及系统 |
CN109857527A (zh) * | 2019-01-04 | 2019-06-07 | 四川虹美智能科技有限公司 | 一种分布式任务调度方法、系统、分布式装置和Redis数据库 |
CN110262898A (zh) * | 2019-06-19 | 2019-09-20 | 广州华多网络科技有限公司 | 一种业务请求的处理方法及客户端 |
CN111737020A (zh) * | 2020-06-24 | 2020-10-02 | 广联达科技股份有限公司 | 分布式集群的并发处理方法及装置 |
CN111752962A (zh) * | 2020-07-01 | 2020-10-09 | 浪潮云信息技术股份公司 | 一种保证mha集群高可用及一致性的系统及方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8375175B2 (en) * | 2009-12-09 | 2013-02-12 | Oracle America, Inc. | Fast and efficient reacquisition of locks for transactional memory systems |
US8924370B2 (en) * | 2011-05-31 | 2014-12-30 | Ori Software Development Ltd. | Efficient distributed lock manager |
-
2020
- 2020-10-14 CN CN202011097234.4A patent/CN112256443B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5612865A (en) * | 1995-06-01 | 1997-03-18 | Ncr Corporation | Dynamic hashing method for optimal distribution of locks within a clustered system |
US6003075A (en) * | 1997-07-07 | 1999-12-14 | International Business Machines Corporation | Enqueuing a configuration change in a network cluster and restore a prior configuration in a back up storage in reverse sequence ordered |
CN102339283A (zh) * | 2010-07-20 | 2012-02-01 | 中兴通讯股份有限公司 | 集群文件系统访问控制方法及集群节点 |
CN104820622A (zh) * | 2015-05-22 | 2015-08-05 | 上海斐讯数据通信技术有限公司 | 一种共享内存锁管理控制方法及系统 |
CN106354565A (zh) * | 2016-09-21 | 2017-01-25 | 努比亚技术有限公司 | 一种分布式锁客户端及控制方法 |
CN106657258A (zh) * | 2016-11-04 | 2017-05-10 | 成都视达科信息技术有限公司 | 一种基于nginx+lua的安全加速中间件实现方法及装置 |
CN109525658A (zh) * | 2018-11-09 | 2019-03-26 | 广州虎牙科技有限公司 | 一种产号方法、服务器、设备、存储介质和业务系统 |
CN109743366A (zh) * | 2018-12-21 | 2019-05-10 | 苏宁易购集团股份有限公司 | 一种用于多活场景的资源加锁方法、装置及系统 |
CN109857527A (zh) * | 2019-01-04 | 2019-06-07 | 四川虹美智能科技有限公司 | 一种分布式任务调度方法、系统、分布式装置和Redis数据库 |
CN110262898A (zh) * | 2019-06-19 | 2019-09-20 | 广州华多网络科技有限公司 | 一种业务请求的处理方法及客户端 |
CN111737020A (zh) * | 2020-06-24 | 2020-10-02 | 广联达科技股份有限公司 | 分布式集群的并发处理方法及装置 |
CN111752962A (zh) * | 2020-07-01 | 2020-10-09 | 浪潮云信息技术股份公司 | 一种保证mha集群高可用及一致性的系统及方法 |
Non-Patent Citations (3)
Title |
---|
《Improving Throughput of BigData Applications》;Janardhana Reddy 等;《IEEE》;全文 * |
《分布式锁技术研究》;陈文武;《中国优秀硕士学位论文全文数据库》;全文 * |
《基于Redis的分布式锁的实现方案》;赖歆;《长江信息通信》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112256443A (zh) | 2021-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111782360B (zh) | 分布式任务调度方法及装置 | |
US6694345B1 (en) | External job scheduling within a distributed processing system having a local job control system | |
US8327375B2 (en) | System and method for supporting resource enlistment synchronization | |
CN108508874B (zh) | 一种监控设备故障的方法和装置 | |
US5301311A (en) | Control method for preventing incorrect reset of common resource and multicomputer system executing the method | |
CN111488255A (zh) | 多线程并发监控方法、装置、设备及存储介质 | |
CN112256443B (zh) | 一种基于redis的动态集群锁系统 | |
US20020184295A1 (en) | Method for mutual computer process monitoring and restart | |
CN103761148A (zh) | 集群定时调度任务的控制方法 | |
CN111459963B (zh) | 核心账务交易并发处理方法及装置 | |
WO2015131542A1 (zh) | 数据处理方法、装置和系统 | |
WO2009089746A1 (fr) | Procédé, dispositif et système de réalisation d'une tâche dans un environnement de grappes | |
CN111225007B (zh) | 数据库连接方法、装置和系统 | |
CN111400011A (zh) | 一种实时任务调度方法、系统、设备及可读存储介质 | |
CN111444002A (zh) | 一种任务调度方法及装置 | |
CN111722934A (zh) | 分布式定时任务处理方法及系统 | |
CN112817933A (zh) | 一种弹性数据库连接池的管理方法及装置 | |
CN113886502B (zh) | 一种数据库和区块链同步的数据处理方法及系统 | |
CN105824709A (zh) | 一种临界区访问方法及装置 | |
CN113312185A (zh) | 一种分布式锁 | |
CN113778650A (zh) | 任务调度方法、装置、电子设备及存储介质 | |
CN112052094A (zh) | 一种基于多线程的任务执行方法 | |
CN108459901B (zh) | 一种进程锁的处理方法、装置及系统 | |
CN115269136A (zh) | 一种异构多核平台分区操作系统安全调度方法及系统 | |
CN113254482A (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 |