CN112486696A - 一种获取分布式锁的方法及设备 - Google Patents
一种获取分布式锁的方法及设备 Download PDFInfo
- Publication number
- CN112486696A CN112486696A CN202011443894.3A CN202011443894A CN112486696A CN 112486696 A CN112486696 A CN 112486696A CN 202011443894 A CN202011443894 A CN 202011443894A CN 112486696 A CN112486696 A CN 112486696A
- Authority
- CN
- China
- Prior art keywords
- token
- service terminal
- preset
- distributed lock
- hash
- 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
Links
Images
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/526—Mutual exclusion algorithms
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
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 Transfer Between Computers (AREA)
Abstract
本申请通过一种获取分布式锁的方法及设备,首先向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token,然后将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token,最后读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。通过该方法可确保业务终端按照申请先后顺序访问分布式缓存***的获取分布式锁,先申请先获得,实现逻辑简单,可靠性好。
Description
技术领域
本申请涉及分布式缓存***技术领域,尤其涉及一种获取分布式锁的技术。
背景技术
随着电子商务、互联网等大数据应用的场景越来越多,能够处理大量动态数据的分布式缓存***得到广泛应用。分布式锁是解决多线程对共享资源访问的一种互斥机制,即通过分布式锁来确保同一时间只有一台计算机中运行的一个业务终端对分布式缓存***的共享资源进行访问。
在现有的Redis分布式缓存***中,一台或者多台计算机中运行的各业务终端按照轮询方式来申请并获取分布式锁,而且申请、获取以及释放分布式锁的实现逻辑复杂。但在很多应用场景,希望各业务终端能按照申请的先后顺序这种公平方式而不是轮询方式来获取分布式锁,而现有Redis分布式缓存***不支持这种方式。
发明内容
本申请的目的是提供一种获取分布式锁的方法及设备,用以解决现有Redis分布式缓存***不支持按申请先后顺序获取分布式锁的技术问题。
根据本申请的一个方面,提供了一种获取分布式锁的方法,其中,所述方法包括:
向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token;
将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token;
读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
可选地,其中,在将所述Token存储在所述缓存***的预设列表中之后,所述方法还包括:
在所述缓存***的预设哈希表中创建一个哈希,其中,所述哈希的key为发送所述分布式锁申请信息的业务终端的Token,所述哈希的value为第一预设时间。
可选地,所述方法还包括:
执行与所述分布式锁对应的业务处理;
更新所述预设哈希表中与所述业务终端的Token对应的哈希的value。
可选地,其中,所述更新所述预设哈希表中与所述业务终端的Token对应的哈希的value包括:
更新所述预设哈希表中与所述Token对应的哈希的value为第二预设时间。
可选地,所述方法还包括:
在所述业务处理执行完成后,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希。
可选地,其中,若所述Token与所述业务终端的Token不匹配,所述方法还包括:
从所述预设哈希表中获取所述Token对应的第一预设时间;
比较所述Token对应的第一预设时间与当前时间,若所述Token对应的第一预设时间小于或者等于当前时间,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希;
读取所述预设列表中存储的下一个Token,并判断是否与所述业务终端的Token匹配,若所述下一个Token与所述业务终端的Token匹配,则所述业务终端获取到所述分布式锁。
可选地,其中,若所述Token对应的第一预设时间大于当前时间,在等待预设时间阈值后,再读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
根据本申请的另一方面,还提供了一种获取分布式锁的设备,其中,所述设备包括:
第一装置,用于向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token;
第二装置,用于将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token;
第四装置,用于读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
可选地,所述设备还包括:
第三装置,用于在所述缓存***的预设哈希表中创建一个哈希,其中,所述哈希的key为发送所述分布式锁申请信息的业务终端的Token,所述哈希的value为第一预设时间。
可选地,所述设备还包括:
第五装置,用于执行与所述分布式锁对应的业务处理;
第六装置,用于更新所述预设哈希表中与所述业务终端的Token对应的哈希的value。
可选地,所述设备还包括:
第七装置,用于从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希。
与现有技术相比,本申请通过一种获取分布式锁的方法及设备,首先向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token,然后将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token,最后读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。通过该方法可确保业务终端按照申请先后顺序访问分布式缓存***的获取分布式锁,先申请先获得,实现逻辑简单,可靠性好。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种获取分布式锁的方法流程图;
图2示出根据本申请另一个方面一种分布式锁的设备示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
在本申请一个典型的配置中,***各模块和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为更进一步阐述本申请所采取的技术手段及取得的效果,下面结合附图及优选实施例,对本申请的技术方案,进行清楚和完整的描述。
图1示出本申请一个方面的一种获取分布式锁的方法流程图,其中,一个实施例的方法包括:
S11向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token;
S12将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token;
S14读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
在本申请中,所述方法通过设备1中运行的业务终端执行,所述设备1为计算机设备和/或云,所述计算机设备包括但不限于个人计算机、笔记本电脑、工业计算机、网络主机、单个网络服务器、多个网络服务器集;所述云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。
在此,所述计算机设备和/或云仅为举例,其他现有的或者今后可能出现的设备和/或资源共享平台如适用于本申请也应包含在本申请的保护范围内,在此,以引用的方式包含于此。
所述业务终端为在设备1中运行的各种业务***,每台设备1中可以部署一个或者多个业务终端。设备1中的业务终端如需要访问与设备1通过光和/或电连接的分布式缓存***的数据,例如,Redis缓存***的数据,首先需要通过线程向分布式缓存***申请,获得分布式锁后才能成功访问。
其中,光和/或电连接可以是基于全光纤网络、全电缆网络、和/或光线电缆混合网络的连接方式,在此,不作限定,任何光和/或电连接方式如适用于本申请也应包含在本申请的保护范围内。
在该实施例中,在所述步骤S11中,所述设备1中运行的业务终端向共享的分布式缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的设备1中该业务终端唯一对应的Token。
继续在该实施例中,在所述步骤S12中,将该业务终端唯一对应的所述Token存储在所述缓存***的一个预设列表中,其中,所述预设列表采用分布式缓存***支持的列表数据结构,按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token。
例如一个应用场景中,该分布式缓存***在t1时刻接收到设备1中的一个业务终端C1发送的分布式锁申请A1,其中,A1中包含与业务终端C1唯一对应的Token为B1;在t2时刻接收到另一个业务终端C2(在设备1或其它设备中运行)发送的分布式锁申请A2,其中,A2中包含与业务终端C2唯一对应的Token为B2,其中,t1小于t2,即分布式缓存***先接收到A1,后接收到A2。则分布式缓存***在t1时刻接收到A1后将B1存入预设列表L中,再在t2时刻接收到A2后将B2存入预设列表L中。
继续在该实施例中,在步骤S14中,读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
继续在上述应用场景中,业务终端C1读取预设列表L中当前时刻最早存入的Token,为B1,并判断是否与自己唯一对应的Token匹配,经判断是与C1唯一对应的Token匹配,则业务终端C1获取到分布式锁。此时业务终端C2读取到预设列表L中当前时刻最早存入的Token也为B1,并经判断与自己唯一对应的Token不匹配,则就不能成功获取到分布式锁。
为了确保不同业务终端都能有公平的机会获取到分布式锁,以及考虑到可能存在业务终端无心跳或者业务处理没有正常释放锁从而导致的死锁问题,需要有一个业务终端的分布式锁申请失效机制,以便从预设列表中删除在先申请的业务终端Token,以确保在后申请的业务终端也能获取到分布式锁。
可选地,其中,在所述步骤S14之前,所述方法还包括:
S13(未示出)在所述缓存***的预设哈希表中创建一个哈希,其中,所述哈希的key为发送所述分布式锁申请信息的业务终端的Token,所述哈希的value为第一预设时间。
其中,所述预设哈希表采用分布式缓存***支持的哈希数据结构,在预设列表中每存入一个业务终端的Token,就在所述预设哈希表中创建一个哈希,其中,该哈希的Key为该业务终端的Token,该哈希的value为第一预设时间,即该业务终端的分布式锁申请的失效时间,例如,第一预设时间可以为该哈希的创建当前时间+预定义的分布式锁申请的过期失效时长,以确保分布式缓存***的效率。
比如,可以预定义分布式锁申请的过期失效时长为1分钟,继续在上述应用场景中,在收到业务终端C1的分布式锁申请A1后,在预设哈希表H中创建哈希h1,其中,哈希h1的key为B1,value为(t1+60s),在收到业务终端C2的分布式锁申请A2后,在预设哈希表H中创建哈希h2,其中,哈希h2的key为B2,value为value为(t2+60s)。若在收到业务终端C1的分布式锁申请A1后超过了1分钟,业务终端C1还没有成功获取到分布式锁,则从预设列表中删除该业务终端唯一对应的B1,这样业务终端C2对应的B2就成为预设列表中最早存储的,业务终端C2就可以获取到分布式锁。
分布式锁申请的过期失效时长的预定义应结合具体应用场景确定。
可选地,所述获取分布式锁的方法还包括:
S15(未示出)执行与所述分布式锁对应的业务处理;
S16(未示出)更新所述预设哈希表中与所述业务终端的Token对应的哈希的value。
设备1的业务终端在成功获取到分布式锁后,在步骤S15中,执行与获取到的分布式锁对应的业务处理,比如对分布式缓存***中相关缓存数据进行读取、更新、删除,或将数据加载到分布式缓存***等操作。
为了避免影响申请到分布式锁的业务终端的正常业务处理,继续在该实施例中,在步骤S16中,更新与业务终端对应的保存在预设哈希表中的哈希的第一预设时间,即预设哈希表中对应哈希的value。
可选地,所述步骤S16包括:
更新所述预设哈希表中与所述Token对应的哈希的value为第二预设时间。
其中,在设备1的业务终端成功获取到分布式锁,执行与该分布式锁对应的业务处理的同时,将预设哈希表中与该业务终端的Token对应的哈希的value更新为第二预设时间,例如,可以将第二预设时间预设为当前时间+业务处理超时时长,以确保该业务终端能正常完成业务处理。
比如,可以预定义业务终端的业务处理超时时长为5秒钟,继续在上述应用场景中,若业务终端C1在t3时刻成功获取到分布式,开始执行相应的业务处理,并将预设哈希表H中对应的哈希h1的value更新为(t3+5s)。若业务处理执行时间超过了5秒钟,则从预设列表L中删除该业务终端C1唯一对应的B1,并从预设哈希表H中删除该业务终端C1对应的哈希h1,以释放分布式锁,这样业务终端C2对应的B2就成为预设列表中最早存储的,业务终端C2就可以获取到分布式锁。
业务处理超时时长的预定义应结合具体应用场景确定。
可选地,所述获取分布式锁的方法还包括:
S17(未示出)在所述业务处理执行完成后,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希。
其中,设备1的业务终端在执行完成获取的分布式锁对应的业务处理后,通过从预设列表中删除与自己对应的Token,并从预设哈希表中删除对应的哈希,来释放分布式锁,以让其它相应的业务终端能成功读取预设列表中下一个Token。
例如,继续在上述应用场景中,若业务终端C1成功获取了分布式锁,并在执行完对应的业务处理后,从预设列表L中删除业务终端C1唯一对应的B1,同时从预设哈希表H中删除该业务终端C1对应的哈希h1,以释放分布式锁。这样业务终端C2对应的B2就成为预设列表L中最早存储的,业务终端C2通过读取到预设列表L中的B2,就可以成功获取到分布式锁。
可选地,若所述Token与所述业务终端的Token不匹配,所述方法还包括:
S18(未示出)从所述预设哈希表中获取所述Token对应的第一预设时间;
S19(未示出)比较所述Token对应的第一预设时间与当前时间,若所述Token对应的第一预设时间小于或者等于当前时间,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希;
S110(未示出)读取所述预设列表中存储的下一个Token,并判断是否与所述业务终端的Token匹配,若所述下一个Token与所述业务终端的Token匹配,则所述业务终端获取到所述分布式锁。
例如,继续在上述应用场景中,在步骤S14中,当业务终端C2在t4时刻读取预设列表L中当前时刻最早存入的Token,为B1,并判断是否与自己唯一对应的Token匹配,经判断与C2唯一对应的B2不匹配,则进一步如步骤S18所述,从预设哈希表H中获取B1对应的哈希h1的value,即(t1+60s),然后如步骤S19所述,比较(t1+60s)与t4,若(t1+60s)小于或者等于t4,说明预设列表L中存储的B1已经过期,相应地预设哈希表H中对应的哈希h1也已经过期,则从预设列表L中删除B1,并从预设哈希表H中删除B1对应的哈希h1,再如步骤S110所述,此时业务终端C2读取预设列表L中存储的下一个Token,为B2,并经判断与自己唯一对应的Token匹配,则业务终端C2就成功获取到分布式锁,而其它业务终端此时还是不能成功获取到分布式锁。
可选地,其中,若所述Token对应的第一预设时间大于当前时间,在等待预设时间阈值后,再读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
继续在上述应用场景中,在步骤S18中,若(t1+60s)大于t4,说明预设列表L中存储的B1继续有效,则业务终端C2等待预设时间阈值后再尝试,即再读取预设列表L中最先存储的Token,并判断是否与B2匹配,若该Token与B2匹配,则业务终端C2获取到分布式锁。
其中,所述预设时间阈值应结合具体应用场景确定。例如,在上述应用场景中,预设时间阈值可设置为150毫秒~300毫秒之间的某个值。
图2示出根据本申请另一个方面的一种获取分布式锁的设备示意图,其中,所述设备包括:
第一装置21,用于向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token;
第二装置22,用于将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token;
第四装置24,用于读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
在该实施例中,所述设备与设备1相同,具体地,是通过设备1中的业务终端执行的。
其中,设备1的第一装置21向与设备1通过光和/或电连接的缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token,接着设备的1第二装置22将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token,然后设备1的第三装置24读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
可选地,所述设备还包括:
第三装置23(未示出),用于在所述缓存***的预设哈希表中创建一个哈希,其中,所述哈希的key为发送所述分布式锁申请信息的业务终端的Token,所述哈希的value为第一预设时间。
其中,所述预设哈希表采用分布式缓存***支持的哈希数据结构,在预设列表中每存入一个业务终端的Token,就在所述预设哈希表中创建一个哈希,其中,该哈希的Key为该业务终端的Token,该哈希的value为第一预设时间,即该业务终端的分布式锁申请的失效时间,例如,第一预设时间可以为该哈希的创建当前时间+预定义的分布式锁申请的过期失效时长,以确保分布式缓存***的效率。
分布式锁申请的过期失效时长的预定义应结合具体应用场景确定。
可选地,所述获取分布式锁的设备还包括:
第五装置25(未示出),用于执行与所述分布式锁对应的业务处理;
第六装置26(未示出),用于更新所述预设哈希表中与所述业务终端的Token对应的哈希的value。
其中,设备1的第三装置23在成功获取到分布式锁后,还可以通过设备1的第五装置25执行与获取到的分布式锁对应的业务处理,比如对分布式缓存***中相关缓存数据进行读取、更新、删除,或将数据加载到分布式缓存***等操作,为了避免影响申请到分布式锁的业务终端的正常业务处理,还可以通过设备1的第六装置26更新与业务终端对应的保存在预设哈希表中的哈希的第一预设时间,即预设哈希表中对应哈希的value。
可选地,所述设备还包括:
第七装置27(未示出),用于在所述业务处理执行完成后,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希。
其中,在设备1的第五装置25执行完成获取的分布式锁对应的业务处理后,还可以通过设备1的第七装置27从预设列表中删除与业务终端对应的Token,并从预设哈希表中删除对应的哈希,来释放分布式锁,以让其它相应的业务终端能成功读取预设列表中下一个Token。
根据本申请的又一方面,还提供了一种计算机可读介质,所述计算机可读介质存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现前述方法。
根据本申请的又一方面,还提供了一种的设备,其中,该设备包括:
一个或多个处理器;以及
存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行如前述方法的操作。
例如,计算机可读指令在被执行时使所述一个或多个处理器:向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token;将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token;读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。进一步地,还可以在所述缓存***的预设哈希表中创建一个哈希,其中,所述哈希的key为发送所述分布式锁申请信息的业务终端的Token,所述哈希的value为第一预设时间。在获取到分布式锁后,执行与所述分布式锁对应的业务处理,并更新所述预设哈希表中与所述业务终端的Token对应的哈希的value。在所述业务处理执行完成后,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件和/或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (13)
1.一种获取分布式锁的方法,其特征在于,所述方法包括:
向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token;
将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token;
读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
2.根据权利要求1所述的方法,其特征在于,在将所述Token存储在所述缓存***的预设列表中之后,所述方法还包括:
在所述缓存***的预设哈希表中创建一个哈希,其中,所述哈希的key为发送所述分布式锁申请信息的业务终端的Token,所述哈希的value为第一预设时间。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
执行与所述分布式锁对应的业务处理;
更新所述预设哈希表中与所述业务终端的Token对应的哈希的value。
4.根据权利要求3所述的方法,其特征在于,所述更新所述预设哈希表中与所述业务终端的Token对应的哈希的value包括:
更新所述预设哈希表中与所述Token对应的哈希的value为第二预设时间。
5.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
在所述业务处理执行完成后,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希。
6.根据权利要求2所述的方法,其特征在于,若所述Token与所述业务终端的Token不匹配,所述方法还包括:
从所述预设哈希表中获取所述Token对应的第一预设时间;
比较所述Token对应的第一预设时间与当前时间,若所述Token对应的第一预设时间小于或者等于当前时间,从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希;
读取所述预设列表中存储的下一个Token,并判断是否与所述业务终端的Token匹配,若所述下一个Token与所述业务终端的Token匹配,则所述业务终端获取到所述分布式锁。
7.根据权利要求6所述的方法,其特征在于,若所述Token对应的第一预设时间大于当前时间,在等待预设时间阈值后,再读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
8.一种获取分布式锁的设备,其特征在于,所述设备包括:
第一装置,用于向缓存***发送分布式锁申请信息,其中,所述分布式锁申请信息包含与发送所述分布式锁申请信息的业务终端唯一对应的Token;
第二装置,用于将所述Token存储在所述缓存***的预设列表中,其中,所述预设列表按时间顺序依次存储接收到的每个发送分布式锁申请信息的业务终端的Token;
第四装置,用于读取所述预设列表中最先存储的Token,并判断是否与所述业务终端的Token匹配,若所述Token与所述业务终端的Token匹配,则获取到所述分布式锁。
9.根据权利要求8所述的设备,其特征在于,所述设备还包括:
第三装置,用于在所述缓存***的预设哈希表中创建一个哈希,其中,所述哈希的key为发送所述分布式锁申请信息的业务终端的Token,所述哈希的value为第一预设时间。
10.根据权利要求9所述的设备,其特征在于,所述设备还包括:
第五装置,用于执行与所述分布式锁对应的业务处理;
第六装置,用于更新所述预设哈希表中与所述业务终端的Token对应的哈希的value。
11.根据权利要求10所述的设备,其特征在于,所述设备还包括:
第七装置,用于从所述预设列表中删除所述Token,并从所述预设哈希表中删除所述Token对应的哈希。
12.一种计算机可读介质,其特征在于,
其上存储有计算机可读指令,所述计算机可读指令被处理器执行以实现如权利要求1至7中任一项所述的方法。
13.一种获取分布式锁的设备,其特征在于,该设备包括:
一个或多个处理器;以及
存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行如权利要求1至7中任一项所述方法的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011443894.3A CN112486696A (zh) | 2020-12-11 | 2020-12-11 | 一种获取分布式锁的方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011443894.3A CN112486696A (zh) | 2020-12-11 | 2020-12-11 | 一种获取分布式锁的方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112486696A true CN112486696A (zh) | 2021-03-12 |
Family
ID=74941219
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011443894.3A Pending CN112486696A (zh) | 2020-12-11 | 2020-12-11 | 一种获取分布式锁的方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112486696A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023045970A1 (zh) * | 2021-09-24 | 2023-03-30 | 深圳前海微众银行股份有限公司 | 一种确定访问令牌的方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060206901A1 (en) * | 2005-03-08 | 2006-09-14 | Oracle International Corporation | Method and system for deadlock detection in a distributed environment |
CN108874552A (zh) * | 2018-06-28 | 2018-11-23 | 杭州云英网络科技有限公司 | 分布式锁执行方法、装置及***、应用服务器和存储介质 |
CN109753364A (zh) * | 2018-12-28 | 2019-05-14 | 北京明朝万达科技股份有限公司 | 一种基于网络的分布式锁的实现方法、设备及介质 |
CN110188110A (zh) * | 2019-05-30 | 2019-08-30 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
CN110231979A (zh) * | 2019-05-07 | 2019-09-13 | 深圳壹账通智能科技有限公司 | 基于区块链的事务处理方法、装置、设备及存储介质 |
CN111258976A (zh) * | 2018-12-03 | 2020-06-09 | 北京京东尚科信息技术有限公司 | 分布式锁实现方法、***、设备及存储介质 |
-
2020
- 2020-12-11 CN CN202011443894.3A patent/CN112486696A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060206901A1 (en) * | 2005-03-08 | 2006-09-14 | Oracle International Corporation | Method and system for deadlock detection in a distributed environment |
CN108874552A (zh) * | 2018-06-28 | 2018-11-23 | 杭州云英网络科技有限公司 | 分布式锁执行方法、装置及***、应用服务器和存储介质 |
CN111258976A (zh) * | 2018-12-03 | 2020-06-09 | 北京京东尚科信息技术有限公司 | 分布式锁实现方法、***、设备及存储介质 |
CN109753364A (zh) * | 2018-12-28 | 2019-05-14 | 北京明朝万达科技股份有限公司 | 一种基于网络的分布式锁的实现方法、设备及介质 |
CN110231979A (zh) * | 2019-05-07 | 2019-09-13 | 深圳壹账通智能科技有限公司 | 基于区块链的事务处理方法、装置、设备及存储介质 |
CN110188110A (zh) * | 2019-05-30 | 2019-08-30 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023045970A1 (zh) * | 2021-09-24 | 2023-03-30 | 深圳前海微众银行股份有限公司 | 一种确定访问令牌的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021180025A1 (zh) | 一种消息处理方法、装置、电子设备及介质 | |
CN111367659B (zh) | 一种Kubernetes中节点的资源管理方法、设备以及介质 | |
CN111767226B (zh) | 一种云计算平台资源的测试方法、***及设备 | |
CN109873863B (zh) | 服务的异步调用方法和装置 | |
CN111258976A (zh) | 分布式锁实现方法、***、设备及存储介质 | |
US20200004464A1 (en) | Method and apparatus for storing data | |
US8832215B2 (en) | Load-balancing in replication engine of directory server | |
CN111625422B (zh) | 线程监控方法、装置、电子设备及计算机可读存储介质 | |
CN111694639B (zh) | 进程容器地址的更新方法、装置和电子设备 | |
CN110647460A (zh) | 一种测试资源管理方法、装置和测试客户端 | |
CN110764930B (zh) | 基于消息模式的请求或应答处理方法及装置 | |
CN113885797B (zh) | 一种数据存储方法、装置、设备及存储介质 | |
CN112486696A (zh) | 一种获取分布式锁的方法及设备 | |
CN114328097A (zh) | 一种文件监控方法、装置、电子设备和存储介质 | |
US20150205675A1 (en) | Method and System for Improving Reliability of a Background Page | |
CN109218338B (zh) | 信息处理***、方法和装置 | |
CN117076096A (zh) | 任务流程的执行方法、装置、计算机可读介质及电子设备 | |
CN111159298A (zh) | 业务请求处理方法、装置、电子设备及存储介质 | |
CN108363613A (zh) | 一种独占锁的加锁方法、电子设备及存储介质 | |
CN112596882A (zh) | 一种延时任务调度的方法、设备及*** | |
CN113760693A (zh) | 用于微服务***的本地调试的方法和装置 | |
CN111782515A (zh) | web应用的状态检测方法、装置、服务器和存储介质 | |
CN110874238A (zh) | 一种线上业务更新方法及其装置 | |
CN114449052B (zh) | 一种数据压缩方法、装置、电子设备及存储介质 | |
CN111324888B (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 | ||
CB02 | Change of applicant information |
Address after: Room 1101-1103, No. 433, Songhu Road, Yangpu District, Shanghai Applicant after: Shanghai wanwansheng Environmental Protection Technology Group Co.,Ltd. Address before: Room 1101-1103, No. 433, Songhu Road, Yangpu District, Shanghai Applicant before: SHANGHAI YUEYI NETWORK INFORMATION TECHNOLOGY Co.,Ltd. |
|
CB02 | Change of applicant information | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210312 |
|
RJ01 | Rejection of invention patent application after publication |