redis分布式锁
Redis实现分布式锁主要利用Redis的setnx命令。setnx是SET if not exists(如果不存在,则SET)的简写。
使用的redisson实现的分布式锁,底层是 setnx和lua脚本 (保证原子性)。
获取锁:
#添加锁,NX是互斥,EX是设置超时时间
SET lock value NX EX 10
释放锁:
#释放锁,删除即可
DEL key
redisson实现的分布式锁-执行流程
redisson实现的分布式锁-可重入
同一个线程可重入
redisson实现的分布式锁-主从一致性
问题:两个线程同时持有同一把锁,没有互斥性(主节点宕机后加到其他主节点(从节点提升为主节点))
解决方案一: 加红锁
缺点: 实现复杂、性能差、运维繁琐
解决方案二: zookeeper 实现分布式锁,可以确保数据强一致性