当前位置: 首页 > news >正文

网站免费优化软件巴南市政建设网站

网站免费优化软件,巴南市政建设网站,创网络科技有限公司,信宜市建设局网站boolean res lock.tryLock(100, 10, TimeUnit.SECONDS); RedissonLock里面有这样一个方法tryLock(),意思是尝试获取锁的结果。 最大等待时间100s,并且获取到锁之后,10s之内没有释放的话,锁会自动失效。 尝试获取锁超时 time …

boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
RedissonLock里面有这样一个方法tryLock(),意思是尝试获取锁的结果。
最大等待时间100s,并且获取到锁之后,10s之内没有释放的话,锁会自动失效。
在这里插入图片描述

尝试获取锁超时

time = waitTime,是我们指定的最大的等待获取锁的时间,比如是100秒
current = 第一次尝试获取锁之前的一个时间戳

当前时间减去current = 第一次获取锁耗费的时间,假设是1秒

time -= 第一次获取锁耗费的时间 = 100秒 - 1秒 = 99秒,最多再等待99秒尝试获取这个锁,如果第一次获取锁的时间直接超过了waitTime等待最大超时时间,就会直接标记为获取锁失败

current = 当前时间

final RFuture<RedissonLockEntry> subscribeFuture = subscribe(threadId);
if (!await(subscribeFuture, time, TimeUnit.MILLISECONDS)) {
if (!subscribeFuture.cancel(false)) {
subscribeFuture.addListener(new FutureListener<RedissonLockEntry>() {
@Override
public void operationComplete(Future<RedissonLockEntry> future) throws Exception {
if (subscribeFuture.isSuccess()) {
unsubscribe(subscribeFuture, threadId);
}
}
});
}
acquireFailed(threadId);
return false;
}

他肯定是做了一些事情,看起来是订阅了什么东西,基于redis的PUB/SUB发布订阅模型,订阅了什么东西,执行了一些操作,所以在下面,将可以等待的时间又减去了这段时间的耗时,比如说是1秒

此时time = 98秒

接下来进入死循环,不断的尝试获取锁、等待,每次time都不断的减去尝试获取锁的耗时,以及等待的耗时,然后如果说在time范围内,获取到了锁,就会返回true,如果始终无法获取到锁的话,那么就会在time指定的最大时间之后,就返回一个false

超时锁自动释放

就是我们自己定义了一个leaseTime和TimeUnit

if (leaseTime != -1) {
return tryLockInnerAsync(leaseTime, unit, threadId, RedisCommands.EVAL_LONG);
}
在这里插入图片描述
如果你没传递这个leaseTime的话,这个if分支是不会走的

RFuture<Long> ttlRemainingFuture = tryLockInnerAsync(commandExecutor.getConnectionManager().getCfg().getLockWatchdogTimeout(), TimeUnit.MILLISECONDS, threadId, RedisCommands.EVAL_LONG);

用默认的LockWatchdogTimeout()时间,30000毫秒,30秒

如果你自己指定了一个leaseTime,就会直接执行lua脚本去加锁,加完锁的结果就直接返回了,并不会对那个future加一个监听器以及执行定时调度任务去刷新key的生存周期,因为你已经指定了leaseTime以后,就意味着你需要的是这个key最多存在10秒钟,必须被删除

这个逻辑是当锁不存在的时候新增一个redis数据
"if (redis.call(‘exists’, KEYS[1]) == 0) then " +
"redis.call(‘hset’, KEYS[1], ARGV[2], 1); " +
"redis.call(‘pexpire’, KEYS[1], ARGV[1]); " +
"return nil; " +
"end; " +

命令大概是这样
hset anyLock 7124f827-475a-4e66-9f3c-fc00e8e8712e:1 1

redis中新增锁之后的数据类型如下:
anyLock: {
“7124f827-475a-4e66-9f3c-fc00e8e8712e:1”: 1
}

这个命令是设置过期时间
pexpire anyLock 10000

也就是说,人家在加锁的时候就设定好了,我们的锁key最多就只能存活10秒钟,而且后台没有定时调度的任务不断的去刷新锁key的生存周期

我们的那个锁到了10秒钟,就会自动被redis给删除,生存时间只能是10秒钟,然后就会自动释放掉了,别的客户端就可以加锁了,但是在10秒之内,其实你也可以自己去手动释放锁

无非就是我们上一讲讲的原理,递减加锁次数,删除锁key

http://www.sczhlp.com/news/82928/

相关文章:

  • 登陆建设官方网站贵州网站建设价格
  • 怎么用域名建网站vi设计策划公司
  • 网页网站的制作过程wordpress更换回编辑器
  • 南京网站建设公司有哪些佛山网站推广排名
  • 建站超市响应式网站可以做缩放图吗
  • 帝国cms个人网站模板中铁集团网站建设
  • wordpress下载站源码投资公司网站建设方案
  • 微官网和手机网站区别昆山网站建设第一品牌
  • 免费做外贸的网站平台舵落口网站建设
  • 网页网站公司如何做备份中国商标网官网免费查询入口
  • 左侧固定导航栏的网站中国美院网站建设公司
  • 网站客户续费做课件最好的素材网站
  • 广西南宁网站推广装修设计软件有哪些
  • 南京省住房和城乡建设厅网站重庆网页优化seo
  • 常州 网站设计个人网站做百度云电影链接犯法吗
  • 网站程序 seo客户引流推广方案
  • 湘潭网站建设 找磐石网络一流大连网址
  • 深圳做网站多少费用做网站建设科技公司
  • 学校网站建设制度建行网站会员注册用户名
  • 企业网站东莞网站建设制作科技部网站
  • 长沙网站优化掌营天下微信小程序格泰网站建设
  • 网站建设专业团队图片为什么wordpress打开很慢
  • 宝安做网站哪家好免费网站模板 优帮云
  • 网站上搜索的动图怎么做壁纸wordpress绑定七牛
  • 公司建个网站要多少钱网站设计建设公司教程
  • 网站建设综合实训总结如何用ps做网站首页的图片
  • 虚拟主机配置珠海seo推广
  • 个人购物网站 怎么建网站开发搭建
  • 网站开发和推广财务预算心理健康网站建设方案
  • 农家乐网站 建设电子商务网站开发背景意义