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

pig Cloud中分布式锁的使用(setIfAbsent)

分布式锁实现解析(仅供参考-基本使用是够的)

特性本代码实现方式
互斥性使用 setIfAbsent(SETNX 命令)保证
防死锁通过设置过期时间(lockTimeout)保证
释放锁的安全性通过校验 lockValue 防止误删
锁的自动续期❌ 未实现
集群容错❌ 单节点模式,无容错
1. 锁核心机制
String lockValue = UUID.randomUUID().toString();
String lockKey = TaskLockKeyEnum.SAVE_MONTH_HOURS_EXCEL.getKey();
long lockTimeout = saveExcelConfig.getLockTimeout();// 1. 获取锁(SETNX + 过期时间)
if (redisTemplate.opsForValue().setIfAbsent(lockKey, lockValue, lockTimeout, TimeUnit.MINUTES)) {try {// 2. 执行业务逻辑jjbHandoverLogService.uploadMonthHoursExcel(yearMonth);} finally {// 3. 释放锁(先校验值再删除)if (lockValue.equals(redisTemplate.opsForValue().get(lockKey))) {redisTemplate.delete(lockKey);}}
}

  • 原子性操作setIfAbsent 实现原子性操作(等价于 Redis 的 SET key value NX PX 命令)
  • 锁标识:使用 UUID 生成唯一值,避免不同节点冲突
  • 超时机制:通过 lockTimeout 设置自动过期时间(单位:分钟),防止死锁
  • 键管理:枚举 TaskLockKeyEnum 统一管理锁键名
2. 锁释放逻辑
finally {
// 释放锁,确保即使任务执行异常也能释放锁if (lockValue.equals(redisTemplate.opsForValue().get(lockKey))) {redisTemplate.delete(lockKey);}
}

  • 值校验释放:比较当前锁值是否与初始值一致
  • 防误删设计:确保只释放当前节点持有的锁
  • finally 保障:异常情况下仍执行释放操作

典型应用场景:集群环境下定时任务的精确调度,如报表生成、数据归档等需要全局唯一执行的操作。

分布式锁实现解析

1. 锁核心机制
String lockValue = UUID.randomUUID().toString();
String lockKey = TaskLockKeyEnum.SAVE_MONTH_HOURS_EXCEL.getKey();
long lockTimeout = saveExcelConfig.getLockTimeout();if (redisTemplate.opsForValue().setIfAbsent(lockKey, lockValue, lockTimeout, TimeUnit.MINUTES)) {// 获取锁成功
} else {// 获取锁失败
}

  • 原子性操作setIfAbsent 实现原子性操作(等价于 Redis 的 SET key value NX PX 命令)
  • 锁标识:使用 UUID 生成唯一值,避免不同节点冲突
  • 超时机制:通过 lockTimeout 设置自动过期时间(单位:分钟),防止死锁
  • 键管理:枚举 TaskLockKeyEnum 统一管理锁键名
2. 锁释放逻辑
finally {if (lockValue.equals(redisTemplate.opsForValue().get(lockKey))) {redisTemplate.delete(lockKey);}
}

  • 值校验释放:比较当前锁值是否与初始值一致
  • 防误删设计:确保只释放当前节点持有的锁
  • finally 保障:异常情况下仍执行释放操作
3. 任务执行流程
graph TD
A[定时任务触发] --> B{获取分布式锁}
B -- 成功 --> C[检查任务开关]
B -- 失败 --> D[记录跳过日志]
C -- 开启 --> E[执行Excel导出]
E --> F[释放锁]
C -- 关闭 --> G[结束]

4. 关键特性
  1. 配置驱动

    # 示例配置
    saveExcel.lockTimeout=30               # 锁超时30分钟
    

典型应用场景:集群环境下定时任务的精确调度,如报表生成、数据归档等需要全局唯一执行的操作。

http://www.dtcms.com/a/308671.html

相关文章:

  • 扫描发票自动录入财务系统怎么做?
  • 定点数 与 浮点数
  • 软件项目中如何编写项目计划书?指南
  • ros2 tf2详解
  • 基于 C 语言视角:流程图中分支与循环结构的深度解析
  • 敏捷开发轻量级看板工具:提升效率的秘密武器
  • 【02】大恒相机SDK C#开发 —— 初始化相机,采集第一帧图像
  • 基于单片机智能油烟机设计/厨房排烟系统设计
  • mac fusion win11虚拟机 不能正确识别bitlocker USB
  • wordpress配置文章详情页自动生成目录点击定位
  • 计算机存储正数,负数
  • Flask Bootstrap 后台权限管理方案
  • 【工具变量】企业数字化转型:数字化无形资产占比测算(2007-2024年)
  • 【算法基础课-算法模板2】数据结构
  • kmp复习,需要多看多练
  • 类和对象(前章)
  • 藏语识别技术在媒资行业的应用案例剖析
  • SELinux 核心概念与访问控制机制解析
  • Windows 10 WSLUbuntu 22.04 安装并迁移到 F 盘
  • MyBatis入门---环境搭建
  • 基于SpringBoot和SpringAI框架实践
  • 案例开发 - 日程管理 - 第四期
  • 鸿蒙开发交叉类型
  • 《零基础入门AI:传统机器学习核心算法(决策树、随机森林与线性回归)》
  • pyspark使用
  • 使用SFTTrainer进行微调
  • sqli-labs靶场Less24
  • FlexLM/SLM协议解析
  • [硬件电路-110]:模拟电路 - 能量并非凭空产生,自激振荡器,一种把直流能量转换成交流信号的装置!
  • TCP/IP协议的安全隐患与防范措施