可重入分布式锁的实现方法、装置、电子设备及存储介质制造方法及图纸

技术编号:30431874 阅读:24 留言:0更新日期:2021-10-24 17:25
本公开公开了一种可重入分布式锁的实现方法、装置、电子设备及存储介质,涉及计算机技术领域,尤其涉及云计算技术领域。具体实现方案为:获取客户端发送的加锁请求,加锁请求中包含第一区域标识、第一上锁键值、目标主机标识和加锁持续时间;查询Mysql数据库的分布式锁表中是否存在包含第一区域标识和第一上锁键值的未过期表项;若存在,判断未过期表项包含的主机标识是否与目标主机标识一致,若是,则基于加锁持续时间更新未过期表项的过期时间,并通知客户端加锁成功。实现了高效易用的可重入分布式锁。可重入分布式锁。可重入分布式锁。

【技术实现步骤摘要】
可重入分布式锁的实现方法、装置、电子设备及存储介质


[0001]本公开涉及计算机
,尤其涉及云计算


技术介绍

[0002]在分布式系统中,常常需要协调各系统的动作。如果不同的系统或同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰,在这种情况下,便需要使用到分布式锁。分布式锁控制主机对资源的争抢,保证操作正确性。

技术实现思路

[0003]本公开提供了一种可重入分布式锁的实现方法、装置、电子设备及存储介质。
[0004]根据本公开的一方面,提供了一种可重入分布式锁的实现方法,应用于基于spring框架构建的分布式系统中的服务器,所述分布式系统还包括Mysql数据库和分布于多个区域的多个主机的客户端,所述方法包括:
[0005]获取客户端发送的加锁请求,所述加锁请求中包含第一区域标识、第一上锁键值、目标主机标识和加锁持续时间;
[0006]查询所述Mysql数据库的分布式锁表中是否存在包含所述第一区域标识和所述第一上锁键值的未过期表项;
[0007]若存在,判断所述未过期表项包含的主机标识是否与所述目标主机标识一致,若是,则基于所述加锁持续时间更新所述未过期表项的过期时间,并通知所述客户端加锁成功。
[0008]根据本公开的另一方面,提供了一种可重入分布式锁的实现装置,应用于基于spring框架构建的分布式系统中的服务器,所述分布式系统还包括Mysql数据库和分布于多个区域的多个主机的客户端,所述装置包括:
[0009]第一获取模块,用于获取客户端发送的加锁请求,所述加锁请求中包含第一区域标识、第一上锁键值、目标主机标识和加锁持续时间;
[0010]第一查询模块,用于查询所述Mysql数据库的分布式锁表中是否存在包含所述第一区域标识和所述第一上锁键值的未过期表项;若存在,触发判断模块;
[0011]所述判断模块,用于判断所述未过期表项包含的主机标识是否与所述目标主机标识一致,若是,触发加锁模块;
[0012]所述加锁模块,用于基于所述加锁持续时间更新所述未过期表项的过期时间,并通知所述客户端加锁成功。
[0013]根据本公开的又一方面,提供了一种电子设备,包括:
[0014]至少一个处理器;以及
[0015]与所述至少一个处理器通信连接的存储器;其中,
[0016]所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一
个处理器执行,以使所述至少一个处理器能够执行可重入分布式锁的实现方法。
[0017]根据本公开的又一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行可重入分布式锁的实现方法。
[0018]根据本公开的又一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现可重入分布式锁的实现方法。
[0019]本公开实施例提供的可重入分布式锁的实现方案中,可以获取客户端发送的加锁请求,加锁请求中包含第一区域标识、第一上锁键值、目标主机标识和加锁持续时间;查询Mysql数据库的分布式锁表中是否存在包含第一区域标识和第一上锁键值的未过期表项;若存在,判断未过期表项包含的主机标识是否与目标主机标识一致,若是,则基于加锁持续时间更新未过期表项的过期时间,并通知客户端加锁成功。从而提供了一种高效易用的可重入分布式锁的实现方案。
[0020]应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
[0021]附图用于更好地理解本方案,不构成对本公开的限定。其中:
[0022]图1为本公开实施例提供的可重入分布式锁的实现方法的一种流程示意图;
[0023]图2为本公开实施例提供的分布式锁表的一种示意图;
[0024]图3为本公开实施例提供的可重入分布式锁的实现方法的另一种流程示意图;
[0025]图4为本公开实施例提供的可重入分布式锁的实现方法的又一种流程示意图;
[0026]图5为本公开实施例提供的可重入分布式锁的实现方法的一种示意图;
[0027]图6是用来实现本公开实施例的可重入分布式锁的实现方法的装置的框图;
[0028]图7是用来实现本公开实施例的可重入分布式锁的实现方法的电子设备的框图。
具体实施方式
[0029]以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0030]目前,可以基于Redis或Zookeper实现分布式锁。但这两种实现方式都较为复杂,且难以实现可重入的机制。
[0031]为降低实现分布式锁的复杂度,并提供可重入机制,本公开提供了一种可重入分布式锁的实现方法、装置、电子设备及存储介质。
[0032]本公开的一个实施例中,提供了一种可重入分布式锁的实现方法,应用于基于spring框架构建的分布式系统中的服务器,分布式系统还包括Mysql数据库和分布于多个区域的多个主机的客户端,方法包括:
[0033]获取客户端发送的加锁请求,加锁请求中包含第一区域标识、第一上锁键值、目标主机标识和加锁持续时间;
[0034]查询Mysql数据库的分布式锁表中是否存在包含第一区域标识和第一上锁键值的
未过期表项;
[0035]若存在,判断未过期表项包含的主机标识是否与目标主机标识一致,若是,则基于加锁持续时间更新未过期表项的过期时间,并通知客户端加锁成功。
[0036]可见,在Mysql数据库创建分布式锁表,通过向Mysql数据库的分布式锁表添加表项的方式即可实现分布式锁,降低了实现分布式锁的复杂度。以主机标识为依据判断是否为重入的加锁请求,针对重入的加锁请求,允许继续加锁,从而实现分布式锁可重入的功能。本公开的加锁逻辑统一由服务器处理,客户端仅需要发送加锁请求,即可收到加锁结果,无需与数据库建立连接,更无需由客户端执行任何关于加锁的逻辑处理,简化了客户端一侧加锁的流程,也不需要在客户端一侧引入额外的工具。服务器基于自身强大处理能力统一处理加锁逻辑,因此,本公开提供的可重入分布式锁的实现方法高效易用。
[0037]下面对本公开实施例提供的可重入分布式锁的实现方法、装置、电子设备及存储介质分别进行详细介绍。
[0038]参见图1,图1为本公开实施例提供的可重入分布式锁的实现方法的一种流程示意图,该方法可以应用于基于spring框架构建的分布式系统中的服务器,分布式系统还包括Mysql数据库和分布于多个区域的多个主机的客户端,如图1所示,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种可重入分布式锁的实现方法,应用于基于spring框架构建的分布式系统中的服务器,所述分布式系统还包括Mysql数据库和分布于多个区域的多个主机的客户端,所述方法包括:获取客户端发送的加锁请求,所述加锁请求中包含第一区域标识、第一上锁键值、目标主机标识和加锁持续时间;查询所述Mysql数据库的分布式锁表中是否存在包含所述第一区域标识和所述第一上锁键值的未过期表项;若存在,判断所述未过期表项包含的主机标识是否与所述目标主机标识一致,若是,则基于所述加锁持续时间更新所述未过期表项的过期时间,并通知所述客户端加锁成功。2.根据权利要求1所述的方法,还包括:若所述未过期表项包含的主机标识与所述目标主机标识不一致,则通知所述客户端加锁失败。3.根据权利要求1所述的方法,还包括:若所述Mysql数据库的分布式锁表中不存在包含所述第一区域标识和所述第一上锁键值的未过期表项,向所述Mysql数据库的分布式锁表中添加包含所述第一区域标识、第一上锁键值、目标主机标识和加锁持续时间的表项;若成功添加该表项,则通知所述客户端加锁成功;若未成功添加该表项,则通知所述客户端加锁失败。4.根据权利要求1所述的方法,还包括:获取客户端发送的解锁请求,所述解锁请求中包含第二区域标识和第二上锁键值;查询所述Mysql数据库的分布式锁表中包含所述第二区域标识和所述第二上锁键值的表项,删除该表项。5.根据权利要求1所述的方法,还包括:当达到定时时刻,查询所述Mysql数据库的分布式锁表中过期时间小于所述定时时刻的表项并删除;其中,所述定时时刻是基于预先设置的定时清理任务确定的。6.一种可重入分布式锁的实现装置,应用于基于spring框架构建的分布式系统中的服务器,所述分布式系统还包括Mysql数据库和分布于多个区域的多个主机的客户端,所述装置包括:第一获取模块,用于获取客户端发送的加锁请求,所述加锁请求中包含第一区域标识、第一上锁键值、目标主机标识和加锁持续时间;第一查询模块,用于查询所述Mysql数据库的分布式锁表中是否存在包含所述第一区域标识和所述第一上...

【专利技术属性】
技术研发人员:张艺坤
申请(专利权)人:北京百度网讯科技有限公司
类型:发明
国别省市:

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

1