Redis实现分布式锁之----超时和失效(非原子性)问题----解决方案

Redis实现分布式锁之----超时和失效(非原子性)问题----解决方案

超时和失效(非原子性)问题

原子性问题 :上锁时存入线程名称,删除时要先判断锁内的名称是不是自己的,是再删除,但是后面的判断和删除非原子性 ,会有并发安全问题。
不可重入问题 :一个线程只能获取一次锁,之后就无法再获取了就是不可重入
失败重试问题 :synchronized获取锁失败会阻塞,当前使用redis,setnx失败就返回了
一致性问题 :Redis主从集群,主节点set锁之后,从节点还没同步时,主节点宕机,从节点变为主节点,这样其他线程也可以获取锁

解决方案

LUA脚本 :使用LUA脚本可以把多条命令作为一条命令执行,使其具有原子性
Watch Dog :看门狗机制,会一直查看锁的过期时间,任务只要没执行完,就会再重置锁的时间
HASH重入次数 :synchronized可重入是内部记录了锁名称和进入锁的次数,Redis使用hash结构可以实现
pub sub :解决失败重试,获取锁失败将锁放入失败队列,获取锁成功通知失败队列让其再去获取锁
RedLock :Redis提供的解决分布式数据一致性问题的算法.

相关推荐
LT101579744413 小时前
2026年微服务性能测试平台选型指南:分布式架构适配与服务联动测试
分布式·微服务·架构
行业研究员13 小时前
2026 Agent Memory主流方案能力解析与落地选型
大数据·数据库·agent记忆
m0_5967490913 小时前
Golang怎么实现队列数据结构_Golang如何用切片实现先进先出的队列【方法】
jvm·数据库·python
qq_2975746713 小时前
MySQL核心技术实战系列(第二篇):MySQL核心基础:库与表的增删改查(CRUD)实战
数据库·mysql
m0_5913647313 小时前
如何编写带默认值的SQL存储过程_简化前端调用接口设计
jvm·数据库·python
iAm_Ike13 小时前
如何处理SQL存储过程存储过程循环陷阱_优化逻辑结构
jvm·数据库·python
Jetev13 小时前
MySQL实现跨库在线迁移的方法_利用Binlog实时数据同步工具
jvm·数据库·python
2401_8504916513 小时前
c++ circle元编程如何使用
jvm·数据库·python
TechWayfarer13 小时前
网络安全视角:利用IP定位API接口识别机房与基站流量(合规风控篇)
开发语言·网络·数据库·python·安全·网络安全
dinglu1030DL13 小时前
Less如何构建CSS样式库_通过继承机制优化组件化开发
jvm·数据库·python