wordpress 企业主题 免费,整站seoseo优化,spam free wordpress,怎么推广微信小程序一种简单的#xff0c;支持不同方案的高性能分布式锁
简介
lock4j是一个分布式锁组件#xff0c;其提供了多种不同的支持以满足不同性能和环境的需求。
立志打造一个简单但富有内涵的分布式锁组件。
特性
简单易用#xff0c;功能强大#xff0c;扩展性强。支持redis… 一种简单的支持不同方案的高性能分布式锁
简介
lock4j是一个分布式锁组件其提供了多种不同的支持以满足不同性能和环境的需求。
立志打造一个简单但富有内涵的分布式锁组件。
特性
简单易用功能强大扩展性强。支持redission,redisTemplate,zookeeper。可混用支持扩展。
如何使用
引入相关依赖(支持同时存在,不同方法不同锁实现)。 dependencies!--若使用redisTemplate作为分布式锁底层则需要引入--dependencygroupIdcom.baomidou/groupIdartifactIdlock4j-redis-template-spring-boot-starter/artifactIdversion${latest.version}/version/dependency!--若使用redisson作为分布式锁底层则需要引入--dependencygroupIdcom.baomidou/groupIdartifactIdlock4j-redisson-spring-boot-starter/artifactIdversion${latest.version}/version/dependency!--若使用zookeeper作为分布式锁底层则需要引入--dependencygroupIdcom.baomidou/groupIdartifactIdlock4j-zookeeper-spring-boot-starter/artifactIdversion${latest.version}/version/dependency
/dependencies
根据底层需要配置redis或zookeeper。
spring:redis:host: 127.0.0.1...coordinate:zookeeper:zkServers: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183在需要分布式的地方使用Lock4j注解。 Service
public class DemoService {//默认获取锁超时3秒30秒锁过期Lock4jpublic void simple() {//do something}//完全配置支持spelLock4j(keys {#user.id, #user.name}, expire 60000, acquireTimeout 1000)public User customMethod(User user) {return user;}}高级使用
配置全局默认的获取锁超时时间和锁过期时间。
lock4j:acquire-timeout: 3000 #默认值3s可不设置expire: 30000 #默认值30s可不设置primary-executor: com.baomidou.lock.executor.RedisTemplateLockExecutor #默认redissonredisTemplatezookeeper可不设置lock-key-prefix: lock4j #锁key前缀, 默认值lock4j可不设置acquire-timeout 可以理解为排队时长超过这个时才就退出排队抛出获取锁超时异常。
为什么必须要有这个参数现实你会一直排队等下去吗所有人都一直排队有没有问题
expire 锁过期时间 。 主要是防止死锁。 建议估计好你锁方法运行时常正常没有复杂业务的增删改查最多几秒留有一定冗余10秒足够。 我们默认30秒是为了兼容绝大部分场景。
自定义执行器。 Service
public class DemoService {//可在方法级指定使用某种执行器若自己实现的需要提前注入到Spring。Lock4j(executor RedissonLockExecutor.class)public Boolean test() {return true;}
}自定义锁key生成器。
默认的锁key生成器为 com.baomidou.lock.DefaultLockKeyBuilder 。 Component
public class MyLockKeyBuilder extends DefaultLockKeyBuilder {Overridepublic String buildKey(MethodInvocation invocation, String[] definitionKeys) {String key super.buildKey(invocation, definitionKeys);// do somethingreturn key;}
}自定义锁获取失败策略。
默认的锁获取失败策略为 com.baomidou.lock.DefaultLockFailureStrategy 。 Component
public class MyLockFailureStrategy implements LockFailureStrategy {Overridepublic void onLockFailure(String key, long acquireTimeout, int acquireCount) {// write my code}
}手动上锁解锁。 Service
public class ProgrammaticService {Autowiredprivate LockTemplate lockTemplate;public void programmaticLock(String userId) {// 各种查询操作 不上锁// ...// 获取锁final LockInfo lockInfo lockTemplate.lock(userId, 30000L, 5000L, RedissonLockExecutor.class);if (null lockInfo) {throw new RuntimeException(业务处理中,请稍后再试);}// 获取锁成功处理业务try {System.out.println(执行简单方法1 , 当前线程: Thread.currentThread().getName() , counter (counter));} finally {//释放锁lockTemplate.releaseLock(lockInfo);}//结束}
}指定时间内不释放锁(限流) Service
public class DemoService {// 用户在5秒内只能访问1次Lock4j(keys {#user.id}, acquireTimeout 0, expire 5000, autoRelease false)public Boolean test(User user) {return true;}
}