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

栏目: 软件资讯 · 发布时间: 4年前

内容简介:正如标题所说,此次更新主要是优化了Redis分布锁的灵活性。 在要加锁的方法上添加RedisLock注解 @RedisLock(key = "自己定义一个key", maxWait = 3000, retry = true, retryRate = 100, timeOut =...

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

博客秘诀:超人气博客是怎样炼成的

博客秘诀:超人气博客是怎样炼成的

Darren Rowse、Chris Garrett / 向怡宁 / 人民邮电出版社 / 201005 / 39.00元

作为Web 2.0的新生事物的博客,如今已蓬勃发展,呈燎原之势,业已成为许多人的一种生活方式。中国从事博客写作的人数已达千万级,各类博客网站不可胜数。 然而,为什么有的博客人气鼎盛,拥趸众多,有的博客却门前冷落,少人问津呢?究竟应该怎样写好自己的博客,才能让它吸引更多访客的关注呢?博客网站还能为我做什么呢? 本书的两位作者长期主持知名博客站点ProBlogger.net,指导了成千上万......一起来看看 《博客秘诀:超人气博客是怎样炼成的》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具