一种分布式锁的实现方法、系统、设备及存储介质技术方案

技术编号:30075813 阅读:17 留言:0更新日期:2021-09-18 08:30
本发明专利技术提供一种分布式锁的实现方法、系统、设备及存储介质,其中,方法包括:设置目标注解,通过同步枚举定义分布式锁的属性信息;在Redis操作类上定义获取分布式锁和释放分布式锁;定义切面类,在所述切面类中依次添加声明注解、切面注解和命令注解,配合Spring框架中的事务性注解,并设置所述切面类和事务性注解的执行顺序;在待加锁的方法中添加所述目标注解。本发明专利技术能够通过目标注解实现自动加锁,简化加锁和释放锁的代码,提高工作效率,便于后期维护。后期维护。后期维护。

【技术实现步骤摘要】
一种分布式锁的实现方法、系统、设备及存储介质


[0001]本专利技术涉及软件工程
,尤其涉及一种分布式锁的实现方法、系统、设备及存储介质。

技术介绍

[0002]目前大型网站及应用都是分布式部署的,而分布式场景中的数据一致性问题一直是比较重要的话题。在大多数场景中为了保证数据的最终一致性,需要很多技术方案的支持,例如分布式事务、分布式锁等。其中,分布式锁是为了保证一个方法在同一时间内只能被一个线程执行。
[0003]现有分布式锁的实现方式有:基于数据库的实现方式、基于zookeeper的实现方式和基于Redis的实现方式。其中,基于数据库实现分布式锁的方式,存在使用分布式锁的效率较低,容易造成死锁的问题;基于zookeeper实现分布式锁的方式效率较高,但是需要zookeeper的第三方插件;而基于Redis实现分布式锁的方式,性能较好,且不需要应用第三方插件,因此,目前大多数企业也都是采用Redis实现分布式锁。
[0004]但是在现有技术中,使用Redis实现分布式锁的过程中,需要在代码中多次重复地添加获取分布式锁和释放分布式锁的代码,导致获取锁和释放锁的过程较为繁琐,效率低,且不便于后期维护。

技术实现思路

[0005]基于此,有必要针对上述技术问题,提供一种分布式锁的实现方法、系统、设备及存储介质。
[0006]一种分布式锁的实现方法,包括以下步骤:设置目标注解,通过同步枚举定义分布式锁的属性信息;在Redis操作类上定义获取分布式锁和释放分布式锁;定义切面类,在所述切面类中依次添加声明注解、切面注解和命令注解,配合Spring框架中的事务性注解,并设置所述切面类和事务性注解的执行顺序;在待加锁的方法中添加所述目标注解。
[0007]在其中一个实施例中,所述设置目标注解,通过同步枚举定义分布式锁的属性信息,具体包括:所述属性信息包括分布式锁的字符串类型、轮询次数、轮询间隔时间和超时时间。
[0008]在其中一个实施例中,所述在Redis操作类上定义获取分布式锁和释放分布式锁,具体包括:定义获取分布式锁时,根据获取用户发出的请求识别请求标识,根据所述请求标识获取分布式锁,设置分布式锁的获取超时时长;若未超过所述获取超时时长,则通过UUID方法随机生成字符串作为所述分布式锁的value值,并返回获取分布式锁的业务代码;若超过所述获取超时时长,则返回获取失败的提示。
[0009]在其中一个实施例中,所述在Redis操作类上定义获取分布式锁和释放分布式锁,具体包括:定义释放分布式锁时,根据释放用户发出的释放请求识别请求标识,根据所述请求标识判断所述释放用户是否与所述获取用户一致;若释放用户与所述获取用户一致,则
根据释放用户发出的value值与所述分布式锁携带的value值是否相同,判断是否释放所述分布式锁;若释放用户与所述获取用户不一致,则返回拒绝释放所述分布式锁的提示。
[0010]在其中一个实施例中,所述若为获取分布式锁的请求,则根据请求中携带的value值与释放分布式锁的value值是否相同确定是否释放所述分布式锁,具体包括:若释放用户发出的value值与所述分布式锁携带的value值相同,则释放所述分布式锁,并返回释放分布式锁的业务代码;若释放用户发出的value值与所述分布式锁携带的value值不相同,则重复请求释放分布式锁,至超过释放超时时长后,停止请求操作,继续下一进程或返回释放失败的提示。
[0011]在其中一个实施例中,所述定义切面类,在所述切面类中依次添加声明注解、切面注解和命令注解,配合Spring框架中的事务性注解,并设置所述切面类和事务性注解的执行顺序,具体包括:设置所述切面类的执行顺序为1,所述事务性注解的执行顺序为2;在执行完所述切面类后,执行所述事务性注解。
[0012]在其中一个实施例中,所述在待加锁的方法中添加所述目标注解,具体包括:在多个用户访问所述待加锁的方法时,在所述待加锁的方法中添加所述目标注解,通过所述目标注解在所述待加锁的方法中自动加锁。
[0013]一种分布式锁的实现系统,包括:注解设置模块,用于设置目标注解,通过同步枚举定义分布式锁的属性信息;锁定义模块,用于在Redis操作类上定义获取分布式锁和释放分布式锁;切面类定义模块,用于定义切面类,在所述切面类中依次添加声明注解、切面注解和命令注解,配合Spring框架中的事务性注解,并设置所述切面类和事务性注解的执行顺序;注解添加模块,用于在待加锁的方法中添加所述目标注解。
[0014]一种设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述各个实施例中所述的一种分布式锁的实现方法的步骤。
[0015]一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述各个实施例中所述的一种分布式锁的实现方法的步骤。
[0016]相比于现有技术,本专利技术的优点及有益效果在于:通过设置目标注解,采用同步枚举定义分布式锁的属性信息,在Redis操作类上定义获取分布式锁和释放分布式锁,定义切面类,并在切面类中添加声明注解、切面注解和命令注解,与Spring框架的事务性注解混用,设置切面类和事务性注解的执行顺序,最后在待加锁的方法中添加目标注解,从而简化了加锁和释放锁的步骤,提高了工作效率,且便于后期维护。
附图说明
[0017]图1为一个实施例中一种分布式锁的实现方法的流程示意图;
[0018]图2为一个实施例中一种分布式锁的实现系统的结构示意图;
[0019]图3为一个实施例中设备的内部结构示意图。
具体实施方式
[0020]为了使本专利技术的目的、技术方案及优点更加清楚明白,下面通过具体实施方式结合附图对本专利技术做进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发
明,并不用于限定本专利技术。
[0021]在一个实施例中,如图1所示,提供了一种分布式锁的实现方法,包括以下步骤:
[0022]步骤S101,设置目标注解,通过同步枚举定义分布式锁的属性信息。
[0023]具体地,编写目标注解,注解上需要一个参数,可以定义为同步枚举的方式,从而便于控制分布式锁的数据量。通过同步枚举的方式定义分布式锁的属性信息。
[0024]其中,属性信息包括分布式锁的key字符串类型、轮询次数、轮询间隔时间、和超时时间。轮询次数设置为整数,避免没有获取到分布式锁的用户无限轮询;轮询时间间隔也设置为整数,即为每次轮询获取分布式锁的间隔时间,间隔时间可以设置的稍长,避免因为轮询过快导致Redis卡死;超时时间为获取分布式锁的总时长,避免不能获取分布式锁的用户一直轮询,导致死锁。
[0025]步骤S102,在Redis操作类上定义获取分布式锁和释放分布式锁。
[0026]具体地,在Redis操作类上分别添加定义获取分布式锁和释放分布式锁的方法。
[0027]步骤S103,定义切面类,在切面类中依本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式锁的实现方法,其特征在于,包括以下步骤:设置目标注解,通过同步枚举定义分布式锁的属性信息;在Redis操作类上定义获取分布式锁和释放分布式锁;定义切面类,在所述切面类中依次添加声明注解、切面注解和命令注解,配合Spring框架中的事务性注解,并设置所述切面类和事务性注解的执行顺序;在待加锁的方法中添加所述目标注解。2.根据权利要求1所述的一种分布式锁的实现方法,其特征在于,所述设置目标注解,通过同步枚举定义分布式锁的属性信息,具体包括:所述属性信息包括分布式锁的字符串类型、轮询次数、轮询间隔时间和超时时间。3.根据权利要求1所述的一种分布式锁的实现方法,其特征在于,所述在Redis操作类上定义获取分布式锁和释放分布式锁,具体包括:定义获取分布式锁时,根据获取用户发出的请求识别请求标识,根据所述请求标识获取分布式锁,设置分布式锁的获取超时时长;若未超过所述获取超时时长,则通过UUID方法随机生成字符串作为所述分布式锁的value值,并返回获取分布式锁的业务代码;若超过所述获取超时时长,则返回获取失败的提示。4.根据权利要求3所述的一种分布式锁的实现方法,其特征在于,所述在Redis操作类上定义获取分布式锁和释放分布式锁,具体包括:定义释放分布式锁时,根据释放用户发出的释放请求识别请求标识,根据所述请求标识判断所述释放用户是否与所述获取用户一致;若释放用户与所述获取用户一致,则根据释放用户发出的value值与所述分布式锁携带的value值是否相同,判断是否释放所述分布式锁;若释放用户与所述获取用户不一致,则返回拒绝释放所述分布式锁的提示。5.根据权利要求4所述的一种分布式锁的实现方法,其特征在于,所述若为获取分布式锁的请求,则根据请求中携带的value值与释放分布式锁的value值是否相同确定是否释放所述分布式...

【专利技术属性】
技术研发人员:李琦宋卫东
申请(专利权)人:重庆锐云科技有限公司
类型:发明
国别省市:

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

1