基于数据库的分布式锁处理方法、装置、存储介质及系统制造方法及图纸

技术编号:33890795 阅读:13 留言:0更新日期:2022-06-22 17:25
本发明专利技术涉及计算机技术领域,提供一种基于数据库的分布式锁处理方法、装置、存储介质及系统,处理方法包括:获取内存锁,以确定持有所述内存锁的进程;当所述进程未持有分布式锁时,生成申请分布式锁的标志,并确定分布式锁的标识;基于所述申请分布式锁的标志和所述分布式锁的标识,发送取锁请求;数据库接收所述取锁请求,并基于所述分布式锁的标识进行空锁检测和锁超时检测,以确定将所述分布式锁分配给所述进程;本发明专利技术的基于数据库的分布式锁处理方法及装置能够避免请求锁的服务器在取锁过程中被阻塞;并且在取锁时判断当前锁是否超时,以避免因当前锁所在的服务器突然宕机,长时间无法释放锁,导致其他服务器一直无法获取到锁。到锁。到锁。

【技术实现步骤摘要】
基于数据库的分布式锁处理方法、装置、存储介质及系统


[0001]本专利技术涉及计算机
,特别是涉及基于数据库的分布式锁处理方法、装置、存储介质及系统。

技术介绍

[0002]目前,不论是单进程程序、多进程程序还是分布式系统,都需要面对一个并发程序处理最常见的问题:共享资源的争用,即如何保证并发场景下对共享资源读写操作的时序性、原子性以及一致性;通常的解决方法是使用“锁”对并发读写数据进行保护。比如,单进程程序中使用内存锁、多进程程序中使用文件锁、以及分布式系统中使用分布式锁等;由于分布式系统的应用普及,因此,对分布式系统中“锁”的使用尤为关注。
[0003]现有技术中,在分布式系统中分布式锁的使用是通过数据库来实现的,主要有两种方法,一种是基于数据库的行级锁;一种是通过比较表字段的值来实现的乐观锁;第一种方法会使系统线程被阻塞,这种阻塞状态不会因等待时长超时被取消,而是直到线程获取到锁,阻塞状态才能取消;第二种方法是多个线程先对共享数据进行操作,再在提交时进行冲突检测,这种处理仍会存在脏读的问题,无法有效锁住资源;此外,在获取到锁的服务器宕机未释放锁时,其它服务器无法获取到该锁。
[0004]因此,如何有针对性且灵活地进行分布式锁的处理是一个亟待解决的问题。

技术实现思路

[0005]鉴于以上所述现有技术的缺点,本专利技术的目的在于提供一种基于数据库的分布式锁处理方法、装置、存储介质及系统,用于解决现有技术中无法正对性且灵活地进行分布式锁的处理的问题。
[0006]为实现上述目的及其他相关目的,本专利技术提供一种基于数据库的分布式锁处理方法,包括以下步骤:获取内存锁,以确定持有所述内存锁的进程;当所述进程未持有分布式锁时,生成申请分布式锁的标志,并确定分布式锁的标识;基于所述申请分布式锁的标志和所述分布式锁的标识,发送取锁请求;数据库接收所述取锁请求,并基于所述分布式锁的标识进行空锁检测和锁超时检测,以确定将所述分布式锁分配给所述进程。
[0007]于本专利技术的一实施例中,所述当所述进程未持有分布式锁时,生成申请分布式锁的标志,以确定分布式锁的标识,包括:当所述进程未持有所述分布式锁时,基于所述进程,生成申请所述分布式锁的标志;基于所述进程,获取所述进程争用的共享资源;基于所述共享资源确定分布式锁的标识。
[0008]于本专利技术的一实施例中,所述基于所述申请分布式锁的标志和所述分布式锁的标识,发送取锁请求,包括:基于所述分布式锁的标识,在所述数据库中预设的分布式锁的数据表中查询分布式锁的标识对应的字段是否有所述标识;当所述标识存在时,基于所述申请分布式锁的标志和所述分布式锁的标识,发送所述取锁请求;当所述标识不存在时,在所述数据库的分布式锁的标识对应的字段中创建所述分布式锁的标识;再基于所述申请分布
式锁的标志和所述分布式锁的标识,发送所述取锁请求。
[0009]于本专利技术的一实施例中,所述数据库接收所述取锁请求,并基于所述分布式锁的标识进行空锁检测和锁超时检测,以确定将所述分布式锁分配给所述进程,包括:所述数据库中预设的所述分布式锁的数据表的字段包括:第一分布式锁标识、第一持有者标志、第一持有时间点以及第一持有超时时长;基于所述分布式锁标识查询对应的所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段是否都为空;当所述字段都为空时,基于所述进程,更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段对应的内容,以确定将所述分布式锁分配给所述进程;当所述字段不为空时,查询所述第一持有超时时长的字段对应的数值,判断是否更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长;并基于判断结果处理是否将所述分布式锁分配给所述进程。
[0010]于本专利技术的一实施例中,所述判断是否更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长;并基于判断结果处理是否将所述分布式锁分配给所述进程,包括:基于所述数值、所述第一持有时间点对应到的第一时间点以及当前时间,判断第一持有者标志对应的持有者持有所述分布式锁的时间是否超时;当判断结果为超时时,将所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段对应的内容都设置为空;基于所述进程,更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段对应的内容;当判断结果为未超时时,基于所述第一持有时间点、所述第一持有超时时长以及所述当前时间,在确定对应的持有者持有所述分布式锁的时间为超时时,再基于所述进程,更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段对应的内容。
[0011]于本专利技术的一实施例中,所述确定持有所述内存锁的进程之后,还包括:当所述进程持有分布式锁时,基于所述进程、分布式锁的标识,发送释放锁请求;数据库接收所述释放锁请求,并基于所述分布式锁的标识,将预设的分布式锁的数据表中对应的字段内容更新为空,以确定将所述进程持有的所述分布式锁释放。
[0012]于本专利技术的一实施例中,所述基于所述分布式锁的标识,将预设的分布式锁的数据表中对应的字段内容更新为空,以确定将所述进程持有的所述分布式锁释放,包括:当在所述分布式锁的数据表中查询到所述分布式锁的标识后,基于所述分布式锁的标识查询对应的第一持有者标志的字段对应的内容;将所述第一持有者标志对应的内容和所述释放请求中的进程信息做比较;当比较结果为匹配一致时,将所述分布式锁的标识对应的所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段对应的内容都置为空,以确定将所述进程持有的所述分布式锁释放。
[0013]对应地,本专利技术提供一种基于数据库的分布式锁处理装置,包括:获取模块,用于获取内存锁,以确定持有所述内存锁的进程;处理模块,用于当所述进程未持有分布式锁时,生成申请分布式锁的标志,并确定分布式锁的标识;发送模块,用于基于所述申请分布式锁的标志和所述分布式锁的标识,发送取锁请求;确定模块,用于数据库接收所述取锁请求,并基于所述分布式锁的标识进行空锁检测和锁超时检测,以确定将所述分布式锁分配给所述进程。
[0014]本专利技术提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现
上述的基于数据库的分布式锁处理方法。
[0015]本专利技术提供一基于数据库的分布式锁处理系统,包括存储器,用于存储计算机程序;处理器,用于运行所述计算机程序以实现上述的基于数据库的分布式锁处理方法。
[0016]如上所述,本专利技术的基于数据库的分布式锁处理方法及装置,具有以下有益效果:
[0017](1)能够避免请求锁的服务器在取锁过程中被阻塞;
[0018](2)在取锁时判断当前锁是否超时,以避免因当前锁所在的服务器突然宕机,长时间无法释放锁,导致其他服务器一直无法获取到锁;
[0019](3)当释放锁时,能够基于持有的分布式锁的标识进行准确释放。
附图说明
[0020]图1显示为本专利技术的基于数据库的分布式锁处本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于数据库的分布式锁处理方法,其特征在于,所述分布式锁处理方法包括以下步骤:获取内存锁,以确定持有所述内存锁的进程;当所述进程未持有分布式锁时,生成申请分布式锁的标志,并确定分布式锁的标识;基于所述申请分布式锁的标志和所述分布式锁的标识,发送取锁请求;数据库接收所述取锁请求,并基于所述分布式锁的标识进行空锁检测和锁超时检测,以确定将所述分布式锁分配给所述进程。2.根据权利要求1所述的方法,其特征在于,所述当所述进程未持有分布式锁时,生成申请分布式锁的标志,以确定分布式锁的标识,包括:当所述进程未持有所述分布式锁时,基于所述进程,生成申请所述分布式锁的标志;基于所述进程,获取所述进程争用的共享资源;基于所述共享资源确定分布式锁的标识。3.根据权利要求2所述的方法,其特征在于,所述基于所述申请分布式锁的标志和所述分布式锁的标识,发送取锁请求,包括:基于所述分布式锁的标识,在所述数据库中预设的分布式锁的数据表中查询分布式锁的标识对应的字段是否有所述标识;当所述标识存在时,基于所述申请分布式锁的标志和所述分布式锁的标识,发送所述取锁请求;当所述标识不存在时,在所述数据库的分布式锁的标识对应的字段中创建所述分布式锁的标识;再基于所述申请分布式锁的标志和所述分布式锁的标识,发送所述取锁请求。4.根据权利要求3所述的方法,其特征在于,所述数据库接收所述取锁请求,并基于所述分布式锁的标识进行空锁检测和锁超时检测,以确定将所述分布式锁分配给所述进程,包括:所述数据库中预设的所述分布式锁的数据表的字段包括:第一分布式锁标识、第一持有者标志、第一持有时间点以及第一持有超时时长;基于所述分布式锁标识查询对应的所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段是否都为空;当所述字段都为空时,基于所述进程,更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长的字段对应的内容,以确定将所述分布式锁分配给所述进程;当所述字段不为空时,查询所述第一持有超时时长的字段对应的数值,判断是否更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长;并基于判断结果处理是否将所述分布式锁分配给所述进程。5.根据权利要求4所述的方法,其特征在于,所述判断是否更新所述第一持有者标志、所述第一持有时间点以及所述第一持有超时时长;并基于判断结果处理是否将所述分布式锁分配给所述进程,包括:基于所述数值、所述第一持有时间点对应到的第一时间点以及当前时间,判...

【专利技术属性】
技术研发人员:李斌
申请(专利权)人:康键信息技术深圳有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1