博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
klock 分布式锁重大更新
阅读量:7078 次
发布时间:2019-06-28

本文共 1393 字,大约阅读时间需要 4 分钟。

klock简介

基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目。基于注解驱动,支持spring Spel,方便的定义锁的key的粒度

本次更新内容

本次更新主要新增了【锁等待超时】和【锁持有超时】的处理策略,这两个参数是为了解决分布式锁的死锁问题而设置的,而增加这两个策略是为了在极端情况下锁失效时业务能够感知并处理。

因为基于redis实现分布式锁,如果使用不当,会在以下场景下遇到锁超时的问题: 锁超时处理逻辑

加锁超时处理策略(LockTimeoutStrategy):

  • NO_OPERATION 不做处理,继续执行业务逻辑
  • FAIL_FAST 快速失败,会抛出KlockTimeoutException
  • KEEP_ACQUIRE 阻塞等待,一直阻塞,直到获得锁,但在太多的尝试后,会停止获取锁并报错,此时很有可能是发生了死锁。
  • 自定义(customLockTimeoutStrategy) 需指定自定义处理的方法的方法名,并保持入参一致,指定自定义处理方法后,会覆盖上述三种策略,且会拦截业务逻辑的运行。

释放锁时超时处理策略(ReleaseTimeoutStrategy):

  • NO_OPERATION 不做处理,继续执行业务逻辑
  • FAIL_FAST 快速失败,会抛出KlockTimeoutException
  • 自定义(customReleaseTimeoutStrategy) 需指定自定义处理的方法的方法名,并保持入参一致,指定自定义处理方法后,会覆盖上述两种策略, 执行自定义处理方法时,业务逻辑已经执行完毕,会在方法返回前和throw异常前执行。

本次更新内容如何使用?

@Klock(name="foo-service", waitTime=2, customLockTimeoutStrategy = "customLockTimeout")    public String foo4(String foo, String bar) {        try {            TimeUnit.SECONDS.sleep(2);            logger.info("acquire lock");        } catch (InterruptedException e) {            e.printStackTrace();        }        return "foo4";    }    private String customLockTimeout(String foo, String bar) {        logger.info("customLockTimeout foo: " + foo + " bar: " + bar);        return "custom foo: " + foo + " bar: " + bar;    }

如上代码,在锁获取超时时,会调用用户自定义的方法。这个和分布式事务TCC的用法类似,在使用自定义处理策略时,需要提供一个方法入参和被加锁的方法一直的方法。

后记

本次更新内容,在测试模块中都已集成相关场景的使用用例,欢迎测试体验

转载地址:http://decml.baihongyu.com/

你可能感兴趣的文章
从ftp上传下载文件(一)
查看>>
12月12日云栖精选夜读:阿里云API创新应用大赛启动:智慧开放,互链解决
查看>>
一个段子的随感
查看>>
ORACLE 修改11.2.0.4 RAC 默认监听端口号1521为1621
查看>>
记一次patch升级过程
查看>>
十张图看懂未来的大数据世界
查看>>
归档模式下四种完全恢复的场景
查看>>
绝妙好文
查看>>
《VMware Virtual SAN权威指南》一2.3.3 二层或三层
查看>>
《计算机科学与工程导论:基于IoT和机器人的可视化编程实践方法第2版》一1.1.2 计算机就业形势分析...
查看>>
一款成熟的数据中心模型设计
查看>>
论坛程序vBulletin 5曝漏洞 可能已泄露千万用户数据
查看>>
大数据资源争夺战此起彼伏 对用户而言是福是祸?
查看>>
一文读懂分布式系统
查看>>
Flask中的请求上下文和应用上下文
查看>>
Web应用防护系统OpenWAF开源CC防护模块
查看>>
重拾百度定位之踩坑篇(上)
查看>>
联想Luigi Brochard:高性能计算三大战略, 推动人工智能飞速发展
查看>>
芒果贴冯振:我是怎么做老年人产品的
查看>>
软银集团任命新董事 ARM与Sprint CEO正式进入董事会
查看>>