基于redissonzookeeper实现的分布式锁kylinlock
1、简介1.1、开源项目kylin-lock: 麒麟分布式锁-支持redisson、zookeeper重入锁、读写锁、联锁、红锁、公平锁
已上传jar到中央仓库,可直接引入依赖 1.2、介绍支持redisson、zookeeper分布式锁 redisson支持重入锁、读写锁、联锁、红锁、公平锁 zookeeper支持重入锁、不可重入锁、读写锁、联锁 支持注解、方法调用、函数式编程等方式加锁 支持多注解,对同一方法加不同的锁 锁的key支持SpEL表达式 支持自定义全局、方法级加锁失败回调 方法级失败回调:方法名、参数类型列表相同,支持相同类型的返回 1.3 分布式锁注解KylinLock字段使用说明name:锁的key一部分,为空则会使用:包名.类名.方法名 keys:锁的key一部分 支持 SpEL表达式,锁的key = prefix:name#keys expire:过期时间 单位:毫秒 acquireTimeout:获取锁超时时间 单位:毫秒 executor:锁执行器 lockType:锁类型,默认重入锁 keySuffix:联锁、红锁个数以及其中每个锁的后缀key,默认:{"1", "2", "3"},支持SpEL 表达式 lockFailure:加锁失败回调类 2、使用说明2.1、引入依赖 com.gitee.wangjkui kylin-lock-spring-boot-starter Latest Version 2.2、配置2.2.1、application.ymlspring: redis: redisson: file: classpath:redisson.yml #分布式锁 kylin: lock: acquire-timeout: 3000 #获取锁超时时间 默认值3000L 单位:毫秒 expire: 30000 #过期时间,默认值30000L 单位:毫秒 retry-interval: 100 #获取锁失败时重试时间间隔,默认值100L 单位:毫秒 lock-key-prefix: kylin-lock #锁前缀 默认配置 primary-executor: com.wjk.kylin.lock.executor.redisson.RedissonLockExecutor #默认执行器。默认redisson>zookeeper redisson: true #是否开启redisson 默认true zookeeper: zk-servers: 127.0.0.1:2181 #zk的server地址,多个server之间使用英文逗号分隔开 。配置地址则开启zookeeper session-timeout: 60000 #会话超时时间,默认值60000 单位:毫秒 connection-timeout: 15000 #连接超时时间,默认值15000 单位:毫秒 base-sleep-time-ms: 5000 #初始sleep时间,默认值5000 单位:毫秒 max-retries: 3 #最大失败重试次数 namespace: curator/kylin/lock #命名空间2.2.2、redisson.yml# 单节点配置 singleServerConfig: # 连接空闲超时,单位:毫秒 idleConnectionTimeout: 10000 # 连接超时,单位:毫秒 connectTimeout: 10000 # 命令等待超时,单位:毫秒 timeout: 3000 # 命令失败重试次数,如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。 # 如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。 retryAttempts: 3 # 命令重试发送时间间隔,单位:毫秒 retryInterval: 1500 # 密码 password: redis123 # 单个连接最大订阅数量 subscriptionsPerConnection: 5 # 客户端名称 #clientName: axin # # 节点地址 address: redis://127.0.0.1:6379 # 发布和订阅连接的最小空闲连接数 subscriptionConnectionMinimumIdleSize: 1 # 发布和订阅连接池大小 subscriptionConnectionPoolSize: 50 # 最小空闲连接数 connectionMinimumIdleSize: 32 # 连接池大小 connectionPoolSize: 64 # 数据库编号 database: 2 # DNS监测时间间隔,单位:毫秒 dnsMonitoringInterval: 5000 # 线程池数量,默认值: 当前处理核数量 * 2 #threads: 0 # Netty线程池数量,默认值: 当前处理核数量 * 2 #nettyThreads: 0 # 编码 codec: ! {} # 传输模式 transportMode: "NIO" 2.3、使用案例2.3.1、重入锁@KylinLock(name = "reentrant_key", expire = 60000) public void demoMethod2() { System.out.println("demoMethod2 - start" + getClass()); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } //重入锁 indexService.demoMethod2(); System.out.println("demoMethod2 - end " + getClass()); } 2.3.2 、读写锁@Override @KylinLock(name = "read-write", acquireTimeout = 0, lockType = LockType.READ) public void read1(String key) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("执行方法read1 , 当前线程:" + Thread.currentThread().getName() + "threadId:" + Thread.currentThread().getId()); } 2.3.3、联锁@KylinLock(lockType = LockType.MULTI) public void demoMethod6() { System.out.println("demoMethod6 - start" + getClass()); try { Thread.sleep(40000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("demoMethod6 - end " + getClass()); } 2.3.4、红锁@KylinLock(lockType = LockType.RED, keySuffix = {"#user.id", ""red2""}, executor = RedissonLockExecutor.class) public void demoMethod11(User user) { System.out.println("demoMethod11 - start" + getClass()); try { Thread.sleep(40000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("demoMethod11 - id:" + user.getId() + ",name:" + user.getName()); } 2.3.5、公平锁@KylinLock(name = "fair_lock_key", lockType = LockType.FAIR, executor = RedissonLockExecutor.class) public void demoMethod8() { System.out.println("demoMethod8 - start" + getClass()); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } indexService.demoMethod8(); System.out.println("demoMethod8 - end " + getClass()); } 2.3.6、多注解@KylinLock(name = "reentrant_key1", expire = 60000) @KylinLock(name = "reentrant_key2", expire = 60000) @KylinLock(name = "reentrant_key3", expire = 60000) public void demoMethod3() { System.out.println("demoMethod3 - start" + getClass()); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("demoMethod3 - end " + getClass()); } 2.3.7、函数式编程public void execute1(String key) { Integer num = lockTemplate.execute(key, IndexServiceImpl::getNumber); System.out.println("执行execute方法1 , 当前线程:" + Thread.currentThread().getName() + " , 获取的返回值是:" + num); } public static Integer getNumber() { try { Thread.sleep(40000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("执行getNumber方法 , 当前线程:" + Thread.currentThread().getName()); return 1; } 2.3.8、自定义加锁失败执行方法//加锁失败,会调用 DemoLockFailureCallBack中方法名称、参数类型列表相同的方法 @KylinLock(acquireTimeout = 0, lockFailure = DemoLockFailureCallBack.class) public Integer demoMethod14(Integer num) { System.out.println("demoMethod12 - start,num:" + num); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("demoMethod12 - end,num:" + num); return num * 2; } @Slf4j @Component public class DemoLockFailureCallBack implements LockFailureCallBack { //方法名称、参数类型列表相同 public Integer demoMethod14(Integer num) { log.error("demoMethod14-方法自定义失败回调,入参num:{}", num); return -1; } }
手机软件推荐,全网视频免费看今天给大家推荐一款安卓手机观看视频软件,这是一款非常好用的高质量观影神器,全网影视入门剧集这里都有,软件资源多画质高清播放流畅,软件纯净没有任何限制,界面简洁干净。此软件主页面推荐
乌卡时代以下几点是未来发展的确定性乌卡时代,即VUCA时代,是指人们生活在一个不稳定性不确定性复杂性模糊性的时代境况或者世界中。vuca是volatility(易变性),uncertainty(不确定性),comp
新华皮肤科中国痤疮周公益活动火热进行中丨战痘秘籍大放送谈起痘痘,超过95的人在一生中不同时期或多或少都会受到痤疮的困扰。痤疮反复发作瘢痕遗留以及带来的敏感肤质不仅会影响到自身的容貌,甚至会影响心理健康。新华医院皮肤科长期设有痤疮玫瑰痤
别小看这3种维生素,对降尿酸大有作用最近有的患者询问我有没有简单的方法可以帮助降尿酸呢?今天就给大家分享补充这几种维生素,可以轻松帮你降尿酸。第一维生素C能帮助促进尿酸排泄,对降尿酸有辅助效果。第二维生素B6可以减少
世界手表前三名的代表款式说起手表,你会听到很多关于这三位成员爱彼百达翡丽和江诗丹顿。这些据说是最负盛名的奢侈手表品牌。虽然有些人会争辩说其他品牌也在生产同样质量的手表,但在过去的百年里,还没有其他品牌达到
谷乃全空气系统在恶劣环境下对过敏性皮肤的作用有哪些呢?夏秋交替,气候干燥,早晚温差较大,人体的抵抗力下降。皮肤的油脂合成逐渐减慢,皮肤水分慢慢丢失。是一些细菌病毒繁殖与传播的时候,也是皮肤的多事之秋。轻则皮肤暗淡或出现脱皮发痒皮肤泛红
连遭爆冷退赛!女单赛场意外不断,中国金花有望会师决赛亚洲系列赛首站WTA500东京站,作为美网之后最具含金量的赛事,虽然世界第一斯维亚泰克没有出席,但仍旧云集一系列顶级名将,可谁曾想在女单赛场却意外爆冷不断,不少高顺位种子球员接连被
喝醋能软化血管?错!搭配这两样,秋季养生功效加倍醋,作为一种常见的调味品,常被用来腌制浸泡一些食物,很多凉拌小菜也离不开它。而说到吃醋,最厉害的应该是山西人,吃面必定要倒很多醋,对于醋的作用,坊间传闻可以软化血管,老一辈的人一直
资讯加速在华布局,博世创投参投自动驾驶芯片公司寒武纪行歌文懂车帝原创魏微懂车帝原创9月22日,博世创投宣布已完成对寒武纪行歌(南京)科技有限公司(以下简称行歌)的投资。不过博世创投并未透露此次投资的具体数额。博世创投投资自动驾驶芯片公司
京东零售集团辛利军京东42万员工中有七成来自农村9月22日,京东联合央视财经频道举办了不起的中国农民的京东农特产购物节农人盛典,来自全国各地的十位感人故事的主人公登上农人盛典的舞台。盛典的舞台上,有扎根大漠治沙种树,种出致富枣的
相信科学法国研究称上班摸鱼是大脑排毒根据法国科学家MathiasPessiglione的研究思考的时间越长,大脑中的谷氨酸就越多。当谷氨酸累积到一定的阈值时,大脑增加了侧脑前额叶外皮的活化成本。它会让你疲惫不堪,难以