跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 来了,更加灵活的 Redis 分布式锁, Martian 框架发布 3.0.39 版本
未分類
24 10 月 2020

来了,更加灵活的 Redis 分布式锁, Martian 框架发布 3.0.39 版本

来了,更加灵活的 Redis 分布式锁, Martian 框架发布 3.0.39 版本

資深大佬 : Joker123456789 6

正如标题所说,此次更新主要是优化了 Redis 分布锁的灵活性。

在要加锁的方法上添加 RedisLock 注解

@RedisLock(key = "自己定义一个 key", maxWait = 3000,             retry = true, retryRate = 100, timeOut = 1000) public int insert(){   return 1; } 

这个锁会在事务开启之前获取,在事务提交以后解锁,并且只对 MarsBean 有效,对 API 和 DAO 无效

RedisLock 注解的参数解释

  • key: 唯一标识,保证全局唯一
  • retry: 如果获取锁失败,是否重试( true 是,false 否),只有设置为 true,下面的几个属性才生效 | 默认为 false
  • retryRate: 重试频率(多少毫秒重试一次)| 默认 100 毫秒
  • maxWait: 最大等待时间(重试多少毫秒以后,就放弃等待) | 默认 3000 毫秒
  • timeOut: 失效时间(多少毫秒后,自动解锁) | 默认 10000 毫秒

如果你不需要锁住整个方法,只需要锁一小段代码,那么可以用下面的方式

在 MarsBean 里面注入 MarsRedisLock 对象

@MarsBean("testService") public class TestService {      @MarsWrite("marsRedisLock")     private MarsRedisLock marsRedisLock;  } 

加锁

LockModel lockModel = new LockModel(); ockModel.setKey("设置一个 key,不同业务之间唯一,保证每次请求都是一样的 key"); ockModel.setValue("设置一个唯一的 value,每次请求都是唯一的"); // 失效时间 ockModel.setTimeOut(10000); // 重试频率(每隔几毫秒重试一次) ockModel.setRetryRate(300); // 没获取到锁,是否重试 lockModel.setRetry(true); // 最大重试时间(重试多久没成功,就直接放弃) ockModel.setMaxWait(5000);  Boolean haslock = marsRedisLock.lock(lockModel); if(haslock){     执行加锁后才能执行的代码 } 

解锁

marsRedisLock.unlock(lockModel.getKey(), lockModel.getValue()); 

Martian 框架官网

http://mars-framework.com

大佬有話說 (0)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具