东莞网站建设做网站,怎样做网站优化 关键词,如意影院,整合营销传播基于redis的分布式锁spring-boot starter组件#xff0c;使得项目拥有分布式锁能力变得异常简单#xff0c;支持spring boot#xff0c;和spirng mvc等spring相关项目 快速开始 spring boot项目接入 1.添加lock starter组件依赖#xff0c;目前还没上传到公共仓库#xff…基于redis的分布式锁spring-boot starter组件使得项目拥有分布式锁能力变得异常简单支持spring boot和spirng mvc等spring相关项目 快速开始 spring boot项目接入 1.添加lock starter组件依赖目前还没上传到公共仓库需要自己下源码build 已上传到maven中央仓库 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-klock-starter/artifactIdversion1.2-SNAPSHOT/version
/dependency 2.application.properties配置redis链接spring.klock.address127.0.0.1:6379 3.在需要加分布式锁的方法上添加注解Klock如 Service
public class TestService {Klock(waitTime Long.MAX_VALUE)public String getValue(String param) throws Exception {if (sleep.equals(param)) {//线程休眠或者断点阻塞达到一直占用锁的测试效果Thread.sleep(1000 * 50);}return success;}
} 支持锁指定的业务key如同一个方法ID入参相同的加锁其他的放行。业务key的获取支持Spel具体使用方式如下 使用参数说明 spring.klock.address : redis链接地址
spring.klock.password : redis密码
spring.klock.database : redis数据索引
spring.klock.waitTime : 获取锁最长阻塞时间默认60单位秒
spring.klock.leaseTime: 已获取锁后自动释放时间默认60单位秒
spring.klock.cluster-server.node-addresses : redis集群配置 如 127.0.0.1:7000,127.0.0.1:7001127.0.0.1:7002
spring.klock.address 和 spring.klock.cluster-server.node-addresses 选其一即可 Klock注解参数说明 Klock可以标注四个参数作用分别如下
namelock的name对应redis的key值。默认为类名方法名
lockType锁的类型目前支持可重入锁公平锁读写锁。默认为公平锁
waitTime获取锁最长等待时间。默认为60s。同时也可通过spring.klock.waitTime统一配置
leaseTime获得锁后自动释放锁的时间。默认为60s。同时也可通过spring.klock.leaseTime统一配置
lockTimeoutStrategy: 加锁超时的处理策略可配置为不做处理、快速失败、阻塞等待的处理策略默认策略为不做处理
customLockTimeoutStrategy: 自定义加锁超时的处理策略需指定自定义处理的方法的方法名并保持入参一致。
releaseTimeoutStrategy: 释放锁时持有的锁已超时的处理策略可配置为不做处理、快速失败的处理策略默认策略为不做处理
customReleaseTimeoutStrategy: 自定义释放锁时需指定自定义处理的方法的方法名并保持入参一致。 锁超时说明 因为基于redis实现分布式锁如果使用不当会在以下场景下遇到锁超时的问题 加锁超时处理策略(LockTimeoutStrategy) NO_OPERATION 不做处理继续执行业务逻辑FAIL_FAST 快速失败会抛出KlockTimeoutExceptionKEEP_ACQUIRE 阻塞等待一直阻塞直到获得锁但在太多的尝试后会停止获取锁并报错此时很有可能是发生了死锁。自定义(customLockTimeoutStrategy) 需指定自定义处理的方法的方法名并保持入参一致指定自定义处理方法后会覆盖上述三种策略且会拦截业务逻辑的运行。释放锁时超时处理策略(ReleaseTimeoutStrategy) NO_OPERATION 不做处理继续执行业务逻辑FAIL_FAST 快速失败会抛出KlockTimeoutException自定义(customReleaseTimeoutStrategy) 需指定自定义处理的方法的方法名并保持入参一致指定自定义处理方法后会覆盖上述两种策略, 执行自定义处理方法时业务逻辑已经执行完毕会在方法返回前和throw异常前执行。 转载于:https://www.cnblogs.com/luchangjiang/p/10805733.html