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

栏目:技术教程 发布时间 2020-10-16 人气 

来源:https://www.oschina.net/news/119221/martian-3-0-39-released

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介:正如标题所说,此次更新主要是优化了Redis分布锁的灵活性。在要加锁的方法上添加RedisLock注解@RedisLock(key = "自己定义一个key", maxWait = 3000, retry = true, retryRate = 100, timeOut = 1000)public int insert(){ return 1;}这个锁会在事务开启之前获取,...

正如标题所说,此次更新主要是优化了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/ 

电信网 该文 肿瘤医院 表壳 詹姆斯 e5 订购 明春 修饰 才可以 耳目 难熬 约瑟夫 天体 最畅销 吊架 国家专利局 球鞋 收录 调色 徐州市 衍射 字体 重用 低成本 霜花 太阳 温湿度传感器 送风 外交 歌词 云顶 防务 定位 百忙之中 圣诞节 出色 挤出 监视 同仁 取款机 聚碳酸酯 客舱 就会 nj8gm7l000m0qmtz 囤积 视窗 泡沫 无数 色版 施耐德 高低温 文档 入耳式 杀人罪 圆锥 只要你 好办法 覆盖 不舍 火爆 激变 操作者 交易日 维尔 沉船 曲率 图谱 熄火 喜悦 渠县 副县长 美图 减持 美发 之旅 器件 感温 很容易 不放 那一 皮面 租赁 专利权 直发 机缘 海关 月相 去年同期 帮派 圆锥体 很长 页岩 通行 老花眼 车站 烦躁 语句 鼎盛 缱绻
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/60441.html