Redis分布式锁
1.分布式应用进行逻辑处理时经常会遇到并发问题。为了保持系统操作原子性,需要进行分布式锁的使用
1.1 加锁
分布式加锁指令:setnx (set if not exists)
setnx lock:codehole true
del lock:codehole
1.2 锁加上过期时间expire 超时问题
为了释放的锁的原子性,锁key可以用随机数或者uuid等唯一性
分布式加锁指令:set lock uuid true ex extimer nx
set lock:codehole true ex 5 nx
del lock:codehole
释放锁的原子性
if redis.call("get",KEYs[1])==ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
1.3.Redission封装 三步实现分布式锁
redission实现原理
是通过Lua脚本 保持指令的原子性。
1.redission.getLock(lockKey) //获取锁
2.redission.lock();//可配置参数 设置过期时间和超时时间等 trylock()
3.redission.unlock();// 释放锁
借用一张图:图片来源:https://www.jianshu.com/p/2d3bf2ff2315
![](https://img.haomeiwen.com/i12112928/34d0732bdd9da24e.png)
1.4.Redlock实现redis集群的锁
redlock可以解决redis集群的分布式锁的主从同步问题,但是性能不太好。
网友评论