redis分布式锁
# redis实现分布式锁
# 上锁:setnx
# 给keys上锁
setnx keys value
1
2
2
将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作
# 解锁: del keys
# 给锁设置一个过期时间
expire keys seconds
# 上锁设置过期时间原子性
set key uuid nx ex seconds
# 锁误删的问题
a请求时,拿到了锁,然后进行业务处理,业务处理时间长,超过了过期时间,锁自动释放。这时B请求拿到了锁,开始处理业务。a处理完业务后,如果释放锁,就会将B请求的锁删除掉。造成锁误删的情况。
# 锁的自动续期问题
如果锁过期时间短,则业务执行较长,在执行业务的时候,如何保证锁的自动续期(看门狗)
# redis集群环境锁丢失问题
redis集群,主节点往从节点同步复制的时候,如果主节点挂了,redis是ap模式(a为高可用,p为容错性,c为一致性);这时拿从节点的数据,里面没有锁。