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

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

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

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

解决方案

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

相关推荐
伤不起bb4 分钟前
MySQL 高可用
linux·运维·数据库·mysql·安全·高可用
却道天凉_好个秋5 小时前
系统架构设计(九):分布式架构与微服务
分布式·架构·系统架构
Yushan Bai5 小时前
ORACLE RAC环境REDO日志量突然增加的分析
数据库·oracle
躺着听Jay5 小时前
Oracle-相关笔记
数据库·笔记·oracle
瀚高PG实验室5 小时前
连接指定数据库时提示not currently accepting connections
运维·数据库
运维成长记6 小时前
mysql数据库-中间件MyCat
数据库·mysql·中间件
尘客.6 小时前
DataX从Mysql导数据到Hive分区表案例
数据库·hive·mysql
TiDB 社区干货传送门7 小时前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
虾球xz7 小时前
游戏引擎学习第280天:精简化的流式实体sim
数据库·c++·学习·游戏引擎
predisw8 小时前
kafka connect 大概了解
分布式·kafka