Redis实现分布式锁
2021-05-07 16:55:41 0 举报
Redis实现分布式锁
作者其他创作
大纲/内容
key[1]:就是im:lock:23443,用户idARGV[1]:就是uuid,因为uuid保证全局唯一EXPIRE:超时释放资源
执行完成
5,自旋
3大要点1,set命令要用set key value px milliseconds nx;2,value要具有唯一性(uuid),保证自己加锁自己释放;3,释放锁时要验证value值,不能误解锁;缺点:在Redis的master节点上拿到了锁;但是这个加锁的key还没有同步到slave节点;master故障,发生故障转移,slave节点升级为master节点;导致锁丢失。改进:基于分布式环境下提出了一种更高级的分布式锁的实现方式:Redlockredlock算法:假设有N个Redis master。font color=\"#ff6666\
客户端B
6,释放锁
lua脚本释放锁if redis.font color=\"#0000ff\
加锁同一个key
判断可重入
是,表示已有,但是一个主线程不同方法,所以直接获取锁
判断是否同一个线程reentrantSign:key+threadIdreentrantCount = REENTRANT_LOCAL_MAP.get().get(reentrantSign)
客户端A
4,尝试加,不成功锁
否,尝试请求redis加锁
3,执行业务代码
ThreadLocal
2,获取锁成功
7,获取锁成功
reentrantCount > 0
1,尝试加锁
0 条评论
下一页