本文主要是介绍分布式锁基于【注解】,杜绝业务重复提交。动态key,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在日常开发中,为了防止高并发,在不依赖过多的中间件的情况下,最常使用的分布式锁之一是 Redis锁。使用Redis锁就不得不面临一个问题,就是在业务代码中要控制Redis加锁、释放锁等等,对代码的侵入性较强。本文采用注解的方式为方法体增加分布式锁,唯一标识从方法参数中动态获取。
优点
- 无侵入。通过注解实现加锁和释放锁,代码中只需关注业务实现,无须关心“锁”问题,避免代码侵入。
- 无死锁。即使某一线程中断没能释放锁,在到达指定的时间后,程序会自动释放锁。
- 锁唯一独有。加锁和释放锁必须由同一线程执行,不会出现A线程加锁后,B线程将锁释放。
- 支持多种方式传参做key。通过注解指定参数名,通过反射,动态获得key。
- 线程间锁互斥。在同一时间内,仅有一个线程持有锁,避免多个线程同时执行逻辑,出现并发情况。
代码解释
- 通过AOP切面对方法执行前和方法执行后加锁和释放锁
- 注解参数传入key保证唯一,通过key加锁保证次key不会重复
- 默认释放锁时间30分钟,可以通过注解参数设置不同方法的默认释放锁时间防止死锁
这篇关于分布式锁基于【注解】,杜绝业务重复提交。动态key的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!