Redis实现分布式锁

可靠的分布式锁,要具备以下几个特性
1.互斥性。在任意时刻,只有一个客户端能持有锁
2.不会发生死锁,即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
3.具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
4.解铃还须系铃人。加速和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。
5.锁不能自己失效。正常执行程序过程中,锁不能因为某些原因失效。

加锁流程
首先去看redis是否包含这个key,如果有再看下value是否匹配,如果有,执行hincrby重入次数加1,并pexpire设置失效时间,返回空值null,结束,如果没有这个value,说明锁被其他线程占用,通过pttl获取key的剩余时间并返回,返回key的剩余时间,解锁,如果redis不存在这个key,就会执行hset key UUID 1.设置键值并初始化重入次数为1,并用pexpire设置失效时间。在这里插入图片描述
解锁流程
首先去看redis是否包含这个key,如果有再看下value是否匹配,如果有,执行hincrby重入次数减1,重入数是否大于0,如果小于0就删除key,广播锁释放消息(通知阻塞等待的线程或进程资源可用),如果大于0
执行pexpire重新设置过期时间,返回0值,结束,如果没有这个key,广播锁释放消息(通知阻塞等待的线程或进程资源可用)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值