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

网站域名审核时间药品网站如何建设

网站域名审核时间,药品网站如何建设,竞价单页系统,广州知名网站建设性价比高Redisson 看门狗(Watch Dog)机制实现原理 Redisson 的 Watch Dog 机制是分布式锁的核心组件之一,用于 自动续期 锁的过期时间,防止业务逻辑执行时间超过锁的持有时间,导致锁提前释放而引发并发问题。以下是其实现原理…

Redisson 看门狗(Watch Dog)机制实现原理

Redisson 的 Watch Dog 机制是分布式锁的核心组件之一,用于 自动续期 锁的过期时间,防止业务逻辑执行时间超过锁的持有时间,导致锁提前释放而引发并发问题。以下是其实现原理的详细分析:


1. 看门狗的核心作用

  • 问题背景
    当线程获取锁后,如果业务执行时间超过锁的过期时间(如设置的 leaseTime=30s),锁可能会被其他线程获取,导致数据不一致。

  • 解决方案
    Watch Dog 会 定期检查 并 自动延长锁的过期时间,确保业务执行完成前锁不会失效。


2. 看门狗的工作流程

(1)加锁时启动看门狗

当使用 tryLock() 或 lock() 方法获取锁时:

  • 如果 不指定 leaseTime(即锁无固定过期时间),Redisson 会 自动启动 Watch Dog

  • 如果 指定 leaseTime(如 lock.lock(10, TimeUnit.SECONDS)),则 不会启动 Watch Dog(由业务自行控制锁的释放)。

关键代码(RedissonLock.class)

java

复制

下载

// 如果未指定 leaseTime,则启动 Watch Dog
if (leaseTime == -1) {// 设置默认过期时间(30秒)internalLockLeaseTime = lockWatchdogTimeout;// 启动 Watch DogscheduleExpirationRenewal(threadId);
}

(2)Watch Dog 的续期逻辑

Watch Dog 本质上是一个 后台定时任务,默认每 10 秒 检查一次锁的状态,并重置锁的过期时间(续期至 30 秒)。

续期任务(renewExpiration()

java

复制

下载

protected void renewExpiration() {// 1. 获取当前线程的锁信息ExpirationEntry entry = EXPIRATION_RENEWAL_MAP.get(getEntryName());if (entry == null) {return;}// 2. 创建定时任务,每 10 秒执行一次Timeout task = commandExecutor.getConnectionManager().newTimeout(new TimerTask() {@Overridepublic void run(Timeout timeout) {// 3. 检查锁是否仍被当前线程持有if (EXPIRATION_RENEWAL_MAP.containsKey(getEntryName())) {// 4. 执行 Lua 脚本,延长锁的过期时间RFuture<Boolean> future = renewExpirationAsync(threadId);future.onComplete((res, e) -> {if (e != null) {log.error("Can't update lock expiration", e);return;}if (res) {// 5. 递归调用,继续续期renewExpiration();}});}}}, lockWatchdogTimeout / 3, TimeUnit.MILLISECONDS); // 默认 10 秒(30s / 3)entry.setTimeout(task);
}
Lua 续期脚本

lua

复制

下载

-- KEYS[1]: 锁的 Key
-- ARGV[1]: 过期时间(30s)
-- ARGV[2]: 客户端唯一标识(UUID + 线程ID)-- 1. 检查锁是否仍由当前线程持有
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then-- 2. 延长锁的过期时间redis.call('pexpire', KEYS[1], ARGV[1]);return 1;
end;
return 0;

(3)释放锁时关闭 Watch Dog

当调用 unlock() 时,Redisson 会 清理 Watch Dog 任务,避免不必要的续期。

关键代码

java

复制

下载

@Override
public void unlock() {try {// 1. 释放锁get(unlockAsync(Thread.currentThread().getId()));} finally {// 2. 取消 Watch Dog 任务cancelExpirationRenewal(Thread.currentThread().getId());}
}

3. 关键配置参数

参数默认值说明
lockWatchdogTimeout30,000 ms锁的默认过期时间(未指定 leaseTime 时生效)
续期间隔10,000 msWatch Dog 的检查间隔(lockWatchdogTimeout / 3
leaseTime-1如果手动指定(如 lock.lock(10, TimeUnit.SECONDS)),则 不启动 Watch Dog

4. 看门狗的适用场景

(1)适合使用 Watch Dog 的情况

  • 业务执行时间不确定(如网络请求、复杂计算)。

  • 需要防止锁意外过期(如 GC 停顿导致业务阻塞)。

(2)不适合使用 Watch Dog 的情况

  • 能明确预估业务时间(如 leaseTime=10s,业务肯定在 5s 内完成)。

  • 对锁的持有时间敏感(如严格要求锁 10s 后必须释放)。


5. 与其他方案的对比

机制Redisson Watch DogSETEX + 自旋重试Zookeeper 临时节点
自动续期✅ 后台线程定时续期❌ 需业务代码控制❌ 依赖 Session 超时
锁安全性高(Lua 脚本原子操作)中(依赖业务代码正确性)高(CP 系统保证)
适用场景高并发、业务时间不确定简单场景、短任务强一致性要求严格的场景

6. 最佳实践

  1. 推荐使用默认 Watch Dog(不指定 leaseTime),避免锁提前释放。

  2. 避免滥用锁:锁的粒度要小(如 lock:order:1001 而非 lock:order)。

  3. 监控 Watch Dog:如果发现续期失败,可能是 Redis 连接问题或锁被强制删除。


总结

Redisson 的 Watch Dog 机制 通过 后台定时任务 + Lua 脚本续期,解决了分布式锁在长业务场景下的 自动保活问题,是生产环境高可用分布式锁的核心保障。

开启新对话


文章转载自:

http://qRiwhfx3.bwttj.cn
http://LCeMukVP.bwttj.cn
http://YgkLA8Pq.bwttj.cn
http://MFgvJl3F.bwttj.cn
http://4HyphxzN.bwttj.cn
http://L6cHzikx.bwttj.cn
http://kJJ5BU6Z.bwttj.cn
http://GUIIphVW.bwttj.cn
http://NJ3GIRw1.bwttj.cn
http://pllfvdwD.bwttj.cn
http://5EHzfsgy.bwttj.cn
http://N0X6g2Hu.bwttj.cn
http://LskfH7r7.bwttj.cn
http://AGwbf5mD.bwttj.cn
http://sAb7PRJP.bwttj.cn
http://dTUw9HlQ.bwttj.cn
http://1MuVsYtt.bwttj.cn
http://9PLH0Ivk.bwttj.cn
http://351r3DeE.bwttj.cn
http://XQuP0YEs.bwttj.cn
http://wMLIAbY6.bwttj.cn
http://9oVcpfPf.bwttj.cn
http://kRqmUCM5.bwttj.cn
http://YEh2oi1R.bwttj.cn
http://j9oBmJi7.bwttj.cn
http://tHVBao3C.bwttj.cn
http://7rK0KXgP.bwttj.cn
http://BPHETyW4.bwttj.cn
http://qY4TUy1W.bwttj.cn
http://IOmfMp3J.bwttj.cn
http://www.dtcms.com/wzjs/750533.html

相关文章:

  • 要怎么推广网站成都旧房改造装修公司哪家好
  • 瑞安网站设计重庆是哪个省划分出来的
  • 怎么找回网站后台密码专门做网站的公司 南阳
  • 网站策划书总结广州网络运营课程培训班
  • 网址大全免费网站辽阳网站网站建设
  • 宁德网站建设制作沈阳企业网站怎样制作
  • 莆田哪里有网站开发国内10大搜索引擎
  • 中山 网站推广网易最新消息新闻
  • 网站添加站长统计代码宁波网站建设
  • 做公司网站需要的材料有哪些湘潭网站
  • 庞各庄网站建设苏州百度seo关键词优化
  • 网站域名免费注册北京网站建设推广
  • 门户网站内容电子商务中的网站开发
  • 手机影视网站开发有没有专门做团购的网站
  • 程序员自己做网站怎么赚钱12380举报网站制度建设
  • 石家庄网站托管丰宁县建设局网站
  • 网站怎么做响应式公司做小程序要多少钱
  • 网站性能容量的收集与分析怎么做专业做外贸网站公司
  • 专业模板建站服务30个无加盟费的项目
  • 单职业传奇网站wordpress开发视频网站
  • 做网站便宜还是app便宜网站建设又叫什么软件
  • 微网站模板代码甘肃广川工程建设有限公司网站
  • 建设工程招标专业网站做网站后的收获
  • 网站的图片要会员才能下载怎么做网站建设飠金手指排名十三
  • 建筑工程网站导航做一个购物网页
  • 招聘网站上找在家做中小企业网站功能
  • 西安视频拍摄制作公司seo搜索如何优化
  • 泰国做那个视频网站免费咨询服务协议合同范本
  • 优秀旅游网站设计支持html5的网站
  • 国内简约网站wordpress设置固定链接404