一种分布式锁管理方法、装置、电子设备及存储介质制造方法及图纸

技术编号:35897932 阅读:17 留言:0更新日期:2022-12-10 10:32
本申请提供一种分布式锁管理方法、装置、电子设备及存储介质,该方法包括:在当前设备的任一线程准备请求访问共享资源时,开启获取锁数据库事务,判断该线程是否拥有分布式锁对象;若有,根据该分布式锁对象的属性信息,判断该分布式锁对象是否失效;若失效,清空线程关于分布式锁对象的局部变量,在数据库的锁表中删除该分布式锁对象对应的记录;为线程新建新的分布式锁对象,提交获取锁数据库事务。通过在设备线程准备请求访问共享资源时,判断分布式锁对象是否失效,在失效的情况下删除相应的记录,并为其创建新的分布式锁对象,以避免线程在请求访问共享资源时因分布式锁失效而无法正常进入共享资源访问队列。法正常进入共享资源访问队列。法正常进入共享资源访问队列。

【技术实现步骤摘要】
一种分布式锁管理方法、装置、电子设备及存储介质


[0001]本申请涉及网络
,尤其涉及一种分布式锁管理方法、装置、电子设备及存储介质。

技术介绍

[0002]在目前的分布式环境下,为了保证共享资源在高并发情况下的同一时间只能被一个设备的一个线程访问,往往会为分布式系统中的各个设备的线程设置分布式锁,以采用一种跨JVM的互斥机制来控制共享资源的访问,因此,设备线程是否拥有正常的分布式锁是访问共享资源的关键。
[0003]在现有技术中,通常在拥有分布式锁的设备线程请求访问共享资源时,先进入共享资源访问队列,以依次独立访问共享资源。在此之前将基于预设的定时任务,对尚未进入访问队列的设备线程进行失效锁的检测,并删除失效锁对应的数据库记录。
[0004]但是,定时任务的执行存在一定的时间间隔,导致无法及时发现设备线程的失效锁,也就导致设备线程在请求访问共享资源时,可能因为分布式锁失效无法正常进入共享资源访问队列,不利于保证设备线程顺利访问共享资源。

技术实现思路

[0005]本申请提供一种分布式锁管理方法、装置、电子设备及存储介质,以解决现有技术无法及时发现线程的失效锁,导致线程在请求访问共享资源时,因分布式锁失效而无法正常进入共享资源访问队列等缺陷。
[0006]本申请第一个方面提供一种分布式锁管理方法,包括:
[0007]在当前设备的任一线程准备请求访问共享资源时,开启获取锁数据库事务,判断该线程是否拥有分布式锁对象;
[0008]若有,则根据该分布式锁对象的属性信息,判断该分布式锁对象是否失效;
[0009]若失效,则清空所述线程关于所述分布式锁对象的局部变量,并在数据库的锁表中删除该分布式锁对象对应的记录;
[0010]为所述线程新建新的分布式锁对象,提交所述获取锁数据库事务,以使所述线程基于新的分布式锁对象请求访问所述共享资源。
[0011]可选的,所述分布式锁对象的属性信息至少包括创建时间和有效时长,所述根据该分布式锁对象的属性信息,判断该分布式锁对象是否失效,包括:
[0012]根据所述分布式锁对象的创建时间和当前系统时间,确定所述分布式锁对象的存在时长;
[0013]当所述分布式锁对象的存在时长超出所述有效时长时,确定所述分布式锁对象失效。
[0014]可选的,还包括:
[0015]若该分布式锁对象未失效,再次为所述线程获取分布式锁对象,提交所述获取锁
数据库事务,以使所述线程累计获取同一个分布式锁对象,增加所述线程的分布式锁对象持有量。
[0016]可选的,所述为所述线程新建新的分布式锁对象,包括:
[0017]获取所述当前设备的分布式锁创建参数;
[0018]根据所述分布式锁创建参数,向所述数据库的锁表中添加对应的记录;
[0019]向所述线程的局部变量写入所述新的分布式锁对象。
[0020]可选的,在向所述线程的局部变量写入所述新的分布式锁对象之前,所述方法还包括:
[0021]判断所述数据库是否报出分布式锁唯一约束异常;
[0022]若是,则根据所述新的分布式锁对象的锁标识,在所述锁表中发起锁查询;
[0023]若查询结果为空,则根据所述线程的业务接口参数,判断是否进入阻塞状态;
[0024]若是,则进入阻塞状态,使所述线程休眠特定时长,并返回到所述获取所述当前设备的分布式锁构建参数的步骤。
[0025]可选的,还包括:
[0026]若所述查询结果不为空,则根据所述查询结果,判断所述查询结果对应的分布式锁对象是否失效;
[0027]若是,则在数据库的锁表中删除该分布式锁对象对应的记录。
[0028]可选的,还包括:
[0029]在所述线程基于分布式锁对象完成对所述共享资源的访问后,开启释放锁数据库事务;
[0030]判断所述线程当前拥有的分布式锁对象是否经过累计获取;
[0031]若是,则对所述线程对分布式锁对象持有量进行递减;
[0032]当所述线程递减后的分布式锁持有量等于0时,释放所述线程的分布式锁对象,并删除所述分布式锁对象在所述锁表中的记录,提交所述释放锁数据库事务。
[0033]本申请第二个方面提供一种分布式锁管理装置,包括:
[0034]第一判断模块,用于在当前设备的任一线程准备请求访问共享资源时,开启获取锁数据库事务,判断该线程是否拥有分布式锁对象;
[0035]第二判断模块,用于若有,则根据该分布式锁对象的属性信息,判断该分布式锁对象是否失效;
[0036]数据处理模块,用于若失效,则清空所述线程关于所述分布式锁对象的局部变量,并在数据库的锁表中删除该分布式锁对象对应的记录;
[0037]管理模块,用于为所述线程新建新的分布式锁对象,提交所述获取锁数据库事务,以使所述线程基于新的分布式锁对象请求访问所述共享资源。
[0038]可选的,所述分布式锁对象的属性信息至少包括创建时间和有效时长,所述第二判断模块,具体用于:
[0039]根据所述分布式锁对象的创建时间和当前系统时间,确定所述分布式锁对象的存在时长;
[0040]当所述分布式锁对象的存在时长超出所述有效时长时,确定所述分布式锁对象失效。
[0041]可选的,所述数据处理模块,还用于:
[0042]若该分布式锁对象未失效,再次为所述线程获取分布式锁对象,提交所述获取锁数据库事务,以使所述线程累计获取同一个分布式锁对象,增加所述线程的分布式锁对象持有量。
[0043]可选的,所述管理模块,具体用于:
[0044]获取所述当前设备的分布式锁创建参数;
[0045]根据所述分布式锁创建参数,向所述数据库的锁表中添加对应的记录;
[0046]向所述线程的局部变量写入所述新的分布式锁对象。
[0047]可选的,所述管理模块,还用于:
[0048]判断所述数据库是否报出分布式锁唯一约束异常;
[0049]若是,则根据所述新的分布式锁对象的锁标识,在所述锁表中发起锁查询;
[0050]若查询结果为空,则根据所述线程的业务接口参数,判断是否进入阻塞状态;
[0051]若是,则进入阻塞状态,使所述线程休眠特定时长,并返回到所述获取所述当前设备的分布式锁构建参数的步骤。
[0052]可选的,所述管理模块,还用于:
[0053]若所述查询结果不为空,则根据所述查询结果,判断所述查询结果对应的分布式锁对象是否失效;
[0054]若是,则在数据库的锁表中删除该分布式锁对象对应的记录。
[0055]可选的,所述管理模块,还用于:
[0056]在所述线程基于分布式锁对象完成对所述共享资源的访问后,开启释放锁数据库事务;
[0057]判断所述线程当前拥有的分布式锁对象是否经过累计获取;
[0058]若是,则对所述线程对分布式锁对象持有本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式锁管理方法,其特征在于,包括:在当前设备的任一线程准备请求访问共享资源时,开启获取锁数据库事务,判断该线程是否拥有分布式锁对象;若有,则根据该分布式锁对象的属性信息,判断该分布式锁对象是否失效;若失效,则清空所述线程关于所述分布式锁对象的局部变量,并在数据库的锁表中删除该分布式锁对象对应的记录;为所述线程新建新的分布式锁对象,提交所述获取锁数据库事务,以使所述线程基于新的分布式锁对象请求访问所述共享资源。2.根据权利要求1所述的方法,其特征在于,所述分布式锁对象的属性信息至少包括创建时间和有效时长,所述根据该分布式锁对象的属性信息,判断该分布式锁对象是否失效,包括:根据所述分布式锁对象的创建时间和当前系统时间,确定所述分布式锁对象的存在时长;当所述分布式锁对象的存在时长超出所述有效时长时,确定所述分布式锁对象失效。3.根据权利要求1所述的方法,其特征在于,还包括:若该分布式锁对象未失效,再次为所述线程获取分布式锁对象,提交所述获取锁数据库事务,以使所述线程累计获取同一个分布式锁对象,增加所述线程的分布式锁对象持有量。4.根据权利要求1所述的方法,其特征在于,所述为所述线程新建新的分布式锁对象,包括:获取所述当前设备的分布式锁创建参数;根据所述分布式锁创建参数,向所述数据库的锁表中添加对应的记录;向所述线程的局部变量写入所述新的分布式锁对象。5.根据权利要求4所述的方法,其特征在于,在向所述线程的局部变量写入所述新的分布式锁对象之前,所述方法还包括:判断所述数据库是否报出分布式锁唯一约束异常;若是,则根据所述新的分布式锁对象的锁标识,在所述锁表中发起锁查询;若查询结果为空,则根据所述线程的业务接口参数,判断是否进入阻塞状态;若是,则进入阻塞状态,使所述线程休眠特...

【专利技术属性】
技术研发人员:洪水能邓志强邓龙亮浣浩
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

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

1