CN110188110B - 一种构建分布式锁的方法及装置 - Google Patents
一种构建分布式锁的方法及装置 Download PDFInfo
- Publication number
- CN110188110B CN110188110B CN201910461305.5A CN201910461305A CN110188110B CN 110188110 B CN110188110 B CN 110188110B CN 201910461305 A CN201910461305 A CN 201910461305A CN 110188110 B CN110188110 B CN 110188110B
- Authority
- CN
- China
- Prior art keywords
- locking
- keyword
- identifier
- queuing queue
- request message
- 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 title claims abstract description 39
- 238000004590 computer program Methods 0.000 claims description 12
- 230000001960 triggered effect Effects 0.000 claims description 11
- 238000005516 engineering process Methods 0.000 abstract description 6
- 239000002699 waste material Substances 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000004075 alteration Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Multi Processors (AREA)
Abstract
本发明实施例提供了一种构建分布式锁的方法及装置,涉及科技金融技术领域,该方法包括:接收请求端发送的加锁请求消息,加锁请求消息包括第一加锁标识、待加锁的关键字,将第一加锁标识添加至关键字对应的排队队列中,排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识。在第一加锁标识位于排队队列首部时,采用第一加锁标识对关键字进行加锁。在触发解锁操作对关键字进行解锁之后,从排队队列中删除第一加锁标识,并采用当前位于排队队列首部的第二加锁标识对关键字进行加锁。故在并发请求加锁时,不需要为每个加锁标识分配一个线程,使得多个线程轮询等待,从而避免线程的浪费,提高使用redis实现分布式锁的性能。
Description
技术领域
本发明实施例涉及科技金融技术领域,尤其涉及一种构建分布式锁的方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。目前,在分布式架构中,基于redis的分布式锁是使用redis数据库的setnx命令来实现,setnx命令是设置一个key当且仅当这个key在redis数据中不存在时返回成功,故需要线程不断查询key是否存在。但是在并发请求时,对于获取锁失败的线程只能轮询等待或失败退出,并发量大时,大量线程被消耗在等待锁的过程中,从而影响系统性能。
发明内容
由于在并发请求加锁时,redis数据库中大量线程消耗在轮询等待中,从而影响系统性能的问题,本发明实施例提供了一种构建分布式锁的方法及装置。
一方面,本发明实施例提供了一种构建分布式锁的方法,包括:
接收请求端发送的加锁请求消息,所述加锁请求消息包括第一加锁标识、待加锁的关键字;
将所述第一加锁标识添加至所述关键字对应的排队队列中,所述排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识;
在确定所述第一加锁标识位于所述排队队列的首部时,采用所述第一加锁标识对所述关键字进行加锁,并将加锁成功消息发送至所述请求端;
在触发解锁操作对所述关键字进行解锁之后,从所述排队队列中删除所述第一加锁标识,并采用当前位于所述排队队列的首部的第二加锁标识对所述关键字进行加锁。
可选地,所述加锁请求消息还包括第一加锁超时时间;
所述采用所述第一加锁标识对所述关键字进行加锁之后,还包括:
将所述第一加锁超时时间添加至计时区;
当所述计时区中的第一加锁超时时间到达时,触发解锁操作对所述关键字进行解锁。
可选地,还包括:
当所述计时区中的第一加锁超时时间未到达时,接收到所述请求端发送的解锁请求消息,则触发解锁操作对所述关键字进行解锁。
可选地,所述触发解锁操作对所述关键字进行解锁之后,还包括:
删除所述计时区中的第一加锁超时时间。
可选地,所述加锁请求消息还包括第一加锁等待时间;
在确定所述第一加锁标识不位于所述排队队列的首部时,将所述第一加锁等待时间添加至计时区;
当所述计时区中的第一加锁等待时间到达时,发送加锁失败消息至所述请求端。
可选地,还包括:
获取所述第一加锁标识在所述排队队列中的排队信息,并将所述加锁请求消息及所述排队信息添加至消息区。
可选地,所述待加锁的关键字为一个或多个;
所述将所述第一加锁标识添加至所述关键字对应的排队队列中,包括:
在所述待加锁的关键字为一个时,确定所述关键字对应的排队队列,将所述第一加锁标识添加至所述关键字对应的排队队列中;
在所述待加锁的关键字为多个时,确定所述多个关键字中每个关键字对应的排队队列,将所述第一加锁标识分别添加至所述每个关键字对应的排队队列中。
一方面,本发明实施例提供了一种构建分布式锁的装置,包括:
接收模块,用于接收请求端发送的加锁请求消息,所述加锁请求消息包括第一加锁标识、待加锁的关键字;
添加模块,用于将所述第一加锁标识添加至所述关键字对应的排队队列中,所述排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识;
加锁模块,用于在确定所述第一加锁标识位于所述排队队列的首部时,采用所述第一加锁标识对所述关键字进行加锁,并将加锁成功消息发送至所述请求端;
解锁模块,用于在触发解锁操作对所述关键字进行解锁之后,从所述排队队列中删除所述第一加锁标识,所述加锁模块采用当前位于所述排队队列的首部的第二加锁标识对所述关键字进行加锁。
可选地,所述加锁请求消息还包括第一加锁超时时间;
所述加锁模块还用于:
采用所述第一加锁标识对所述关键字进行加锁之后,将所述第一加锁超时时间添加至计时区。
所述解锁模块还用于:
当所述计时区中的第一加锁超时时间到达时,触发解锁操作对所述关键字进行解锁。
可选地,所述解锁模块还用于:
当所述计时区中的第一加锁超时时间未到达时,接收到所述请求端发送的解锁请求消息,则触发解锁操作对所述关键字进行解锁。
可选地,所述解锁模块还用于:
触发解锁操作对所述关键字进行解锁之后,删除所述计时区中的第一加锁超时时间。
可选地,所述加锁请求消息还包括第一加锁等待时间;
所述加锁模块还用于:
在确定所述第一加锁标识不位于所述排队队列的首部时,将所述第一加锁等待时间添加至计时区;
当所述计时区中的第一加锁等待时间到达时,发送加锁失败消息至所述请求端。
可选地,所述添加模块还用于:
获取所述第一加锁标识在所述排队队列中的排队信息,并将所述加锁请求消息及所述排队信息添加至消息区。
可选地,所述待加锁的关键字为一个或多个;
所述添加模块具体用于:
在所述待加锁的关键字为一个时,确定所述关键字对应的排队队列,将所述第一加锁标识添加至所述关键字对应的排队队列中;
在所述待加锁的关键字为多个时,确定所述多个关键字中每个关键字对应的排队队列,将所述第一加锁标识分别添加至所述每个关键字对应的排队队列中。
一方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现构建分布式锁的方法的步骤。
一方面,本发明实施例提供了一种计算机可读存储介质,其存储有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行构建分布式锁的方法的步骤。
本发明实施例中,由于在接收到请求端发送的加锁请求消息时,将加锁请求消息中的加锁标识添加至排队队列中,然后采用位于排队队列的首部的第一加锁标识对关键词进行加锁,在解锁后删除排队队列首部的第一加锁标识,然后采用位于排队队列首部的第二加锁标识对关键词进行加锁,故在并发请求加锁时,不需要为每个加锁标识分配一个线程,使得多个线程轮询等待,从而避免线程的浪费,提高使用redis实现分布式锁的性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种应用场景示意图;
图2为本发明实施例提供的一种构建分布式锁的方法的流程示意图;
图3为本发明实施例提供的排队区、消息区和计时区的示意图;
图4为本发明实施例提供的排队区、消息区和计时区的示意图;
图5为本发明实施例提供的排队区、消息区和计时区的示意图;
图6为本发明实施例提供的一种构建分布式锁的装置的结构示意图;
图7为本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了方便理解,下面对本发明实施例中涉及的名词进行解释。
Redis:一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。
Key:需要加锁的关键字,例如在某些业务系统中需要对客户的操作加锁,则可以把客户号作为关键字加锁。
Tokenid:对于每个加锁请求的交易唯一标识,解锁时需要传入加锁时返回的tokenid。
本发明实施例中的构建分布式锁的方法可以应用于如图1所示的应用场景,在该应用场景中包括请求端101、数据库102。
该应用场景中,请求端101是与银行等金融机构进行业务交互的业务请求端,数据库102是银行等金融机构内部的数据库102,请求端101在需要使用数据库102中的关键字时,可以发送加锁请求消息至数据库102。数据库102在接收到加锁请求消息后,对数据库102中对应的关键字进行加锁,当请求端101使用完关键字时,发送解锁请求消息至数据库102。数据库102在接收到解锁请求消息后,对数据库102中对应的关键字进行解锁。请求端101可以为一个或多个,当一个请求端101对数据库102中的关键字加锁时,其他请求端101不能对该同一个关键字进行加锁。数据库102中包括排队区1021、消息区1022和计时区1023,其中,排队区1021包括一个或多个排队队列,每个排队队列对应一个关键字,每个排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识。接收到加锁请求消息时,在排队队列尾部插入加锁请求消息中的加锁标识,触发解锁时,从排队队列中删除对应的加锁标识。消息区1022用于保存加锁请求消息及排队信息。计时区1023具备计时功能和超时处理功能,具体地,计时区1023保存加锁超时时间和加锁等待时间,在加锁超时时间到达时,触发解锁,在加锁等待时间到达时,发送加锁失败消息至请求端101。
基于图1所示的应用场景图,本发明实施例提供了一种构建分布式锁的方法的流程,该方法的流程可以由构建分布式锁的装置执行,如图2所示,包括以下步骤:
步骤S201,接收请求端发送的加锁请求消息。
加锁请求消息包括第一加锁标识、待加锁的关键字。
步骤S202,将第一加锁标识添加至关键字对应的排队队列中。
具体地,排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识。排队区中使用redis中的list模拟排队队列,每个关键字对应一个排队队列。当接收到解锁请求消息时,先根据加锁请求消息中的待加锁的关键字确定排队队列,然后将加锁标识插入关键字的排队队列的队尾。
可选地,加锁请求消息中待加锁的关键字可以为一个或多个。
在待加锁的关键字为一个时,确定关键字对应的排队队列,将第一加锁标识添加至关键字对应的排队队列中。
示例性地,设定加锁请求消息1中待加锁的关键字包括key1,加锁请求消息中的加锁标识为tokenid1,则将加锁标识tokenid1插入关键字key1对应的排队队列的队尾。
在待加锁的关键字为多个时,确定多个关键字中每个关键字对应的排队队列,将第一加锁标识分别添加至每个关键字对应的排队队列中。
示例性地,设定加锁请求消息2中待加锁的关键字包括key1和key2,加锁请求消息中的加锁标识为tokenid2,则将加锁标识tokenid2分别插入关键字key1对应的排队队列的队尾和关键字key2对应的排队队列的队尾。由于一个加锁标识位于多个关键字对应的排队队列中,故可以实现对多个关键字进行同步加锁。
步骤S203,在确定第一加锁标识位于排队队列的首部时,采用第一加锁标识对关键字进行加锁,并将加锁成功消息发送至请求端。
步骤S204,在触发解锁操作对关键字进行解锁之后,从排队队列中删除第一加锁标识,并采用当前位于排队队列的首部的第二加锁标识对关键字进行加锁。
具体地,若排队队列中之前并没有保存任何加锁标识,当将第一加锁标识添加至排队队列后,第一加锁标识将位于队列首部,此时可以直接对关键字进行加锁,加锁成功后发送加锁成功消息至请求端。若在关键字加锁期间,再次接收得到加锁请求消息,则将加锁请求消息中的第二加锁标识添加至排队队列,而不能直接采用第二加锁标识对关键字加锁。在触发解锁操作对关键字解锁后,从排队队列中删除第一加锁标识,此时第二加锁标识位于排队队列的首部,则采用第二加锁标识对关键字加锁。
由于在接收到请求端发送的加锁请求消息时,将加锁请求消息中的加锁标识添加至排队队列中,然后采用位于排队队列的首部的第一加锁标识对关键词进行加锁,在解锁后删除排队队列首部的第一加锁标识,然后采用位于排队队列首部的第二加锁标识对关键词进行加锁,故在并发请求加锁时,不需要为每个加锁标识分配一个线程,使得多个线程轮询等待,从而避免线程的浪费,提高redis数据库的性能。
可选地,在上述步骤S202之后,获取第一加锁标识在排队队列中的排队信息,并将加锁请求消息及排队信息添加至消息区。
具体地,将第一加锁标识添加至关键字对应的排队队列中之后,可以获得当前排队队列中位于第一加锁标识之前的加锁标识的数量,即第一加锁标识在排队队列中的排队消息。然后采用哈希存储的方式将加锁请求消息及排队信息保存在消息区。通过设置消息区保存加锁请求消息及排队信息,便于请求端实时获知加锁请求的处理状态。
可选地,加锁请求消息还包括第一加锁超时时间,在上述步骤S203之后,将第一加锁超时时间添加至计时区。具体地,加锁超时时间为预先设置的关键字加锁的最长时间,将第一加锁超时时间添加至计时区后,计时区启动计时功能。
在一种可能的实施方式中,当计时区中的第一加锁超时时间到达时,触发解锁操作对关键字进行解锁。在关键字解锁后,可以删除计时区中的第一加锁超时时间,同时删除排队队列中的第一加锁标识。另外还可以通知请求端关键字加锁失效。由于在数据库中设置计时区对关键字的加锁时长进行计时,在关键字超时未解锁时,主动触发关键字解锁,从而避免关键字长时间被锁而使得其它请求端长时间等待的问题。
在一种可能的实施方式中,当计时区中的第一加锁超时时间未到达时,接收到请求端发送的解锁请求消息,则触发解锁操作对关键字进行解锁。在关键字解锁后,可以删除计时区中的第一加锁超时时间,同时删除排队队列中的第一加锁标识,以使排队队列中的第二加锁标识对关键字进行加锁。
可选地,加锁请求消息还包括第一加锁等待时间,在步骤S203中,在确定第一加锁标识不位于排队队列的首部时,将第一加锁等待时间添加至计时区,当计时区中的第一加锁等待时间到达时,发送加锁失败消息至请求端。
具体实施中,当第一加锁标识不位于排队队列的首部时,请求端需要等待,但是请求端因为实际业务需要并不能等待很长时间,故请求端在发送加锁请求消息时,可以携带第一加锁等待时间,即请求端可以等待的最长时间。将第一加锁等待时间添加至计时区后,计时区启动计时功能,当第一加锁等待时间到达时,发送加锁失败消息至请求端,从而避免请求端长时间等待而影响实际业务。
为了更好的解释本发明实施例,下面结合具体的实施场景描述本发明实施例提供的一种构建分布式锁的方法,该方法包括以下步骤:
redis数据库包括排队区、消息区和计时区,redis数据库接收请求端发送的加锁请求1:Lock(key1,tokenid1,30,10),其中,key1为待加锁的关键字1,tokenid1为加锁标识1,30为加锁等待时间30s,10为加锁超时时间10s。
请参见图3,在排队区中建立关键字1的排队队列A,将加锁标识1添加至排队队列A。此时加锁标识1位于排队队列A的队首,故可以直接采用加锁标识1对关键字1进行加锁,然后将加锁请求1的加锁超时时间10s添加至计时区,将加锁请求1和排队信息保存至消息区,其中,排队信息为当前等待0个加锁。
在关键1加锁期间,redis数据库接收请求端发送的加锁请求2:Lock(key1|key2,tokenid2,30,10),其中,key2为待加锁的关键字2,tokenid2为加锁标识2,30为加锁等待时间30s,10为加锁超时时间10s。
请参见图4,将加锁标识2添加至关键字1的排队队列,在排队区中建立关键字2的排队队列B,将加锁标识2添加至排队队列B。此时加锁标识2不是位于排队队列A的队首,故等待,将加锁请求2中关键字1的加锁等待时间30s添加至计时区。加锁标识2位于排队队列B的队首,可以直接采用加锁标识2对关键字2进行加锁,然后将加锁请求2中关键字2的加锁超时时间10s添加至计时区。由于加锁标识2在排队队列A中需要等待一个加锁,而在排队队列B中不需要等待,则加锁标识2总共需要等待一个加锁。将加锁请求2和排队信息保存至消息区。
请参见图5,当计时区中加锁请求1的加锁超时时间到达时,或redis数据库接收请求端发送的解锁请求1时,其中,解锁请求1中携带关键字1和加锁标识1,则对关键字1进行解锁,同时排队队列A中的加锁标识1、消息区中的加锁请求1和排队信息、计时区中加锁请求1的加锁超时时间10s。采用加锁标识2对关键字1进行加锁,消息区中加锁请求2的排队信息更新为等待0个加锁,将加锁请求2中关键字1的加锁超时时间10s添加至计时区,删除计时区中加锁请求2中关键字1的加锁等待时间30s。
由于在接收到请求端发送的加锁请求消息时,将加锁请求消息中的加锁标识添加至排队队列中,然后采用位于排队队列的首部的第一加锁标识对关键词进行加锁,在解锁后删除排队队列首部的第一加锁标识,然后采用位于排队队列首部的第二加锁标识对关键词进行加锁,故在并发请求加锁时,不需要为每个加锁标识分配一个线程,使得多个线程轮询等待,从而避免线程的浪费,提高使用redis实现分布式锁的性能。通过在数据库中设置计时区对关键字的加锁时长进行计时,在关键字超时未解锁时,主动触发关键字解锁,从而避免关键字长时间被锁而使得其它请求端长时间等待的问题。
基于相同的技术构思,本发明实施例提供了一种构建分布式锁的装置,如图6所示,该装置600包括:
接收模块601,用于接收请求端发送的加锁请求消息,所述加锁请求消息包括第一加锁标识、待加锁的关键字;
添加模块602,用于将所述第一加锁标识添加至所述关键字对应的排队队列中,所述排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识;
加锁模块603,用于在确定所述第一加锁标识位于所述排队队列的首部时,采用所述第一加锁标识对所述关键字进行加锁,并将加锁成功消息发送至所述请求端;
解锁模块604,用于在触发解锁操作对所述关键字进行解锁之后,从所述排队队列中删除所述第一加锁标识,所述加锁模块603采用当前位于所述排队队列的首部的第二加锁标识对所述关键字进行加锁。
可选地,所述加锁请求消息还包括第一加锁超时时间;
所述加锁模块603还用于:
采用所述第一加锁标识对所述关键字进行加锁之后,将所述第一加锁超时时间添加至计时区。
所述解锁模块604还用于:
当所述计时区中的第一加锁超时时间到达时,触发解锁操作对所述关键字进行解锁。
可选地,所述解锁模块604还用于:
当所述计时区中的第一加锁超时时间未到达时,接收到所述请求端发送的解锁请求消息,则触发解锁操作对所述关键字进行解锁。
可选地,所述解锁模块604还用于:
触发解锁操作对所述关键字进行解锁之后,删除所述计时区中的第一加锁超时时间。
可选地,所述加锁请求消息还包括第一加锁等待时间;
所述加锁模块603还用于:
在确定所述第一加锁标识不位于所述排队队列的首部时,将所述第一加锁等待时间添加至计时区;
当所述计时区中的第一加锁等待时间到达时,发送加锁失败消息至所述请求端。
可选地,所述添加模块602还用于:
获取所述第一加锁标识在所述排队队列中的排队信息,并将所述加锁请求消息及所述排队信息添加至消息区。
可选地,所述待加锁的关键字为一个或多个。
基于相同的技术构思,本发明实施例提供了一种计算机设备,如图7所示,包括至少一个处理器701,以及与至少一个处理器连接的存储器702,本发明实施例中不限定处理器701与存储器702之间的具体连接介质,图7中处理器701和存储器702之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。
在本发明实施例中,存储器702存储有可被至少一个处理器701执行的指令,至少一个处理器701通过执行存储器702存储的指令,可以执行前述的构建分布式锁的方法中所包括的步骤。
其中,处理器701是计算机设备的控制中心,可以利用各种接口和线路连接计算机设备的各个部分,通过运行或执行存储在存储器702内的指令以及调用存储在存储器702内的数据,从而对关键字加锁和解锁。可选的,处理器701可包括一个或多个处理单元,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。在一些实施例中,处理器701和存储器702可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器701可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器702作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器702可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器702是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本发明实施例中的存储器702还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
基于相同的技术构思,本发明实施例提供了一种计算机可读存储介质,其存储有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行构建分布式锁的方法的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种构建分布式锁的方法,其特征在于,包括:
接收请求端发送的加锁请求消息,所述加锁请求消息包括第一加锁标识、待加锁的关键字;
将所述第一加锁标识添加至所述关键字对应的排队队列中,所述排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识;
在确定所述第一加锁标识位于所述排队队列的首部时,采用所述第一加锁标识对所述关键字进行加锁,并将加锁成功消息发送至所述请求端;
在触发解锁操作对所述关键字进行解锁之后,从所述排队队列中删除所述第一加锁标识,并采用当前位于所述排队队列的首部的第二加锁标识对所述关键字进行加锁。
2.如权利要求1所述的方法,其特征在于,所述加锁请求消息还包括第一加锁超时时间;
所述采用所述第一加锁标识对所述关键字进行加锁之后,还包括:
将所述第一加锁超时时间添加至计时区;
当所述计时区中的第一加锁超时时间到达时,触发解锁操作对所述关键字进行解锁。
3.如权利要求2所述的方法,其特征在于,还包括:
当所述计时区中的第一加锁超时时间未到达时,接收到所述请求端发送的解锁请求消息,则触发解锁操作对所述关键字进行解锁。
4.如权利要求3所述的方法,其特征在于,所述触发解锁操作对所述关键字进行解锁之后,还包括:
删除所述计时区中的第一加锁超时时间。
5.如权利要求1所述的方法,其特征在于,所述加锁请求消息还包括第一加锁等待时间;
在确定所述第一加锁标识不位于所述排队队列的首部时,将所述第一加锁等待时间添加至计时区;
当所述计时区中的第一加锁等待时间到达时,发送加锁失败消息至所述请求端。
6.如权利要求1所述的方法,其特征在于,还包括:
获取所述第一加锁标识在所述排队队列中的排队信息,并将所述加锁请求消息及所述排队信息添加至消息区。
7.如权利要求1至6任一所述的方法,其特征在于,所述待加锁的关键字为一个或多个;
所述将所述第一加锁标识添加至所述关键字对应的排队队列中,包括:
在所述待加锁的关键字为一个时,确定所述关键字对应的排队队列,将所述第一加锁标识添加至所述关键字对应的排队队列中;
在所述待加锁的关键字为多个时,确定所述多个关键字中每个关键字对应的排队队列,将所述第一加锁标识分别添加至所述每个关键字对应的排队队列中。
8.一种构建分布式锁的装置,其特征在于,包括:
接收模块,用于接收请求端发送的加锁请求消息,所述加锁请求消息包括第一加锁标识、待加锁的关键字;
添加模块,用于将所述第一加锁标识添加至所述关键字对应的排队队列中,所述排队队列用于按照接收加锁请求消息的先后顺序保存加锁请求消息中的加锁标识;
加锁模块,用于在确定所述第一加锁标识位于所述排队队列的首部时,采用所述第一加锁标识对所述关键字进行加锁,并将加锁成功消息发送至所述请求端;
解锁模块,用于在触发解锁操作对所述关键字进行解锁之后,从所述排队队列中删除所述第一加锁标识,所述加锁模块采用当前位于所述排队队列的首部的第二加锁标识对所述关键字进行加锁。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1~7任一权利要求所述方法的步骤。
10.一种计算机可读存储介质,其特征在于,其存储有可由计算机设备执行的计算机程序,当所述程序在计算机设备上运行时,使得所述计算机设备执行权利要求1~7任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910461305.5A CN110188110B (zh) | 2019-05-30 | 2019-05-30 | 一种构建分布式锁的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910461305.5A CN110188110B (zh) | 2019-05-30 | 2019-05-30 | 一种构建分布式锁的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110188110A CN110188110A (zh) | 2019-08-30 |
CN110188110B true CN110188110B (zh) | 2024-05-07 |
Family
ID=67718850
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910461305.5A Active CN110188110B (zh) | 2019-05-30 | 2019-05-30 | 一种构建分布式锁的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110188110B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737681B (zh) * | 2019-10-15 | 2022-02-11 | 深圳前海环融联易信息科技服务有限公司 | 处理请求的加锁处理方法、装置、计算机设备及存储介质 |
CN110971700B (zh) * | 2019-12-10 | 2023-07-21 | 腾讯云计算(北京)有限责任公司 | 分布式锁的实现方法及装置 |
CN113138992A (zh) * | 2020-01-19 | 2021-07-20 | 上海静客网络科技有限公司 | 一种构建分布式锁的方法 |
CN111400053B (zh) * | 2020-03-17 | 2023-12-15 | 畅捷通信息技术股份有限公司 | 数据库访问系统、方法、装置和计算机可读存储介质 |
CN112486696A (zh) * | 2020-12-11 | 2021-03-12 | 上海悦易网络信息技术有限公司 | 一种获取分布式锁的方法及设备 |
CN113535416B (zh) * | 2021-06-30 | 2024-02-27 | 北京百度网讯科技有限公司 | 可重入分布式锁的实现方法、装置、电子设备及存储介质 |
CN115941485A (zh) * | 2022-11-03 | 2023-04-07 | 中盈优创资讯科技有限公司 | 一种基于网元设备配置下发队列管控的方法及装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256509A (zh) * | 2008-04-07 | 2008-09-03 | 中兴通讯股份有限公司 | 一种锁机制的加锁方法、解锁方法和实现方法 |
JP2011210106A (ja) * | 2010-03-30 | 2011-10-20 | Nippon Telegr & Teleph Corp <Ntt> | メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラム |
CN103514177A (zh) * | 2012-06-20 | 2014-01-15 | 盛趣信息技术(上海)有限公司 | 数据存储方法及系统 |
CN103699363A (zh) * | 2013-12-13 | 2014-04-02 | 华中科技大学 | 一种用于在多核平台下优化关键临界区的方法 |
CN107181789A (zh) * | 2017-03-31 | 2017-09-19 | 北京奇艺世纪科技有限公司 | 一种分布式锁实现方法及装置 |
CN107818018A (zh) * | 2016-09-14 | 2018-03-20 | 北京京东尚科信息技术有限公司 | 分布式锁的控制方法和装置 |
CN107943841A (zh) * | 2017-10-30 | 2018-04-20 | 深圳前海微众银行股份有限公司 | 流式数据处理方法、系统和计算机可读存储介质 |
CN107977376A (zh) * | 2016-10-24 | 2018-05-01 | 腾讯科技(深圳)有限公司 | 分布式数据库系统及事务处理方法 |
CN109753364A (zh) * | 2018-12-28 | 2019-05-14 | 北京明朝万达科技股份有限公司 | 一种基于网络的分布式锁的实现方法、设备及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6944615B2 (en) * | 2001-06-28 | 2005-09-13 | International Business Machines Corporation | System and method for avoiding deadlock situations due to pseudo-deleted entries |
US7853951B2 (en) * | 2005-07-25 | 2010-12-14 | Intel Corporation | Lock sequencing to reorder and grant lock requests from multiple program threads |
US8627333B2 (en) * | 2011-08-03 | 2014-01-07 | International Business Machines Corporation | Message queuing with flexible consistency options |
US10235404B2 (en) * | 2014-06-25 | 2019-03-19 | Cohesity, Inc. | Distributed key-value store |
-
2019
- 2019-05-30 CN CN201910461305.5A patent/CN110188110B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256509A (zh) * | 2008-04-07 | 2008-09-03 | 中兴通讯股份有限公司 | 一种锁机制的加锁方法、解锁方法和实现方法 |
JP2011210106A (ja) * | 2010-03-30 | 2011-10-20 | Nippon Telegr & Teleph Corp <Ntt> | メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラム |
CN103514177A (zh) * | 2012-06-20 | 2014-01-15 | 盛趣信息技术(上海)有限公司 | 数据存储方法及系统 |
CN103699363A (zh) * | 2013-12-13 | 2014-04-02 | 华中科技大学 | 一种用于在多核平台下优化关键临界区的方法 |
CN107818018A (zh) * | 2016-09-14 | 2018-03-20 | 北京京东尚科信息技术有限公司 | 分布式锁的控制方法和装置 |
CN107977376A (zh) * | 2016-10-24 | 2018-05-01 | 腾讯科技(深圳)有限公司 | 分布式数据库系统及事务处理方法 |
CN107181789A (zh) * | 2017-03-31 | 2017-09-19 | 北京奇艺世纪科技有限公司 | 一种分布式锁实现方法及装置 |
CN107943841A (zh) * | 2017-10-30 | 2018-04-20 | 深圳前海微众银行股份有限公司 | 流式数据处理方法、系统和计算机可读存储介质 |
CN109753364A (zh) * | 2018-12-28 | 2019-05-14 | 北京明朝万达科技股份有限公司 | 一种基于网络的分布式锁的实现方法、设备及介质 |
Non-Patent Citations (1)
Title |
---|
对等式协同设计系统数据一致性研究;刘巨保;陈冬芳;李新宇;;计算机工程;20080720(第14期);96-97+103 * |
Also Published As
Publication number | Publication date |
---|---|
CN110188110A (zh) | 2019-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
CN107608773B (zh) | 任务并发处理方法、装置及计算设备 | |
CN108319496B (zh) | 资源访问方法、业务服务器、分布式系统及存储介质 | |
WO2019179026A1 (zh) | 电子装置、集群访问域名自动生成方法及存储介质 | |
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
US8666958B2 (en) | Approaches to reducing lock communications in a shared disk database | |
CN103544153A (zh) | 一种基于数据库的数据更新方法和系统 | |
US11972414B2 (en) | Data recording methods and apparatuses, electronic devices, and storage media | |
CN108512930B (zh) | 一种共享文件的管理方法、装置、服务器和存储介质 | |
US10108456B2 (en) | Accelerated atomic resource allocation on a multiprocessor platform | |
CN110781196A (zh) | 区块链事务处理方法、装置、计算机设备及存储介质 | |
CN112053149A (zh) | 一种防止重复支付的方法、装置、电子设备和可读存储介质 | |
CN113204407A (zh) | 一种内存超配管理方法及装置 | |
US11500693B2 (en) | Distributed system for distributed lock management and method for operating the same | |
CN107391539B (zh) | 事务处理方法、服务器和存储介质 | |
CN115686881A (zh) | 数据处理方法、装置和计算机设备 | |
CN114327642A (zh) | 一种数据读写的控制方法及电子设备 | |
CN110162395B (zh) | 一种内存分配的方法及装置 | |
CN111984379B (zh) | 读写事务控制方法、系统、终端设备及存储介质 | |
CN115599532A (zh) | 一种访问索引的方法以及计算机集群 | |
CN112286685A (zh) | 一种资源分配的方法及装置 | |
CN112541041A (zh) | 一种数据处理方法、装置、服务器及存储介质 | |
CN112015563A (zh) | 消息队列切换方法、装置、电子设备及存储介质 | |
CN113704297B (zh) | 业务处理请求的处理方法、模块及计算机可读存储介质 | |
CN115048628A (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 |