Redis分布式锁
2019-04-08 15:52:32 6 举报
AI智能生成
redis分布式锁
作者其他创作
大纲/内容
Redis分布式锁
加锁
setNx介绍
NX 表示这个key没有值,则设置key的值为value,XX:表示如果有值,才设置成功 EX:失效期单位为s PX:失效期的单位为ms,100ms
流程
1、setNx成功之后,说明加锁成功
2、设置失效期的目的:防止锁超时,一直不释放锁,导致死锁问题
3、value值可用uuid替代,保证每个value都不一致
解锁
解锁流程
1、先get,判断set之前的值和当前get到的值是否一致
2、一致则删除当前的key
3、删除成功则解锁成功
存在的坑
1、当key失效的时候,另外一个线程get到锁,这个时候,之前拿到锁的线程已经get到值了,正在解锁,正在要删除key
2、此时,删除key的时候,由于另外一个线程已经拿到锁了,这个时候就会把新key给删除了
3、此时的key被删除了,别的线程setNx的时候,能拿到锁了,导致出现线程不安全的情况
解锁的方案
1、解锁的时候,一定要保证解锁过程是原子的
2、也就是:在判断当前key值和之前的是否相同,以及删除掉当前key这步操作,一定要是原子的
3、解决方案,可以采用lua脚本解锁
0 条评论
下一页