redis分布式锁

分布式锁的缘由

我们都知道 可以通过redis setnx 上锁占坑 防止并发

>setnx lock:code true

ok 

...do something

>del lock:code

但是如果执行逻辑出现异常可能导致死锁,这时我们就会考虑增加过期时间

>setnx lock:code true

ok 

>expire lock:code 5

...do something

>del lock:code

但是服务器突然挂掉 还是会导致死锁的问题,因为这两条命令不是原子执行

也许这时你会想到redis事务,但是我们是根据抢到锁才去设置过期时间,没抢到是不执行expire的 ,但是事务是没有if else的

为了解决这个问题,redis2.8之后 加入set扩展参数 可以让setnx 和 expire一起执行

>set lock:code true ex 5 nx

ok

....do something

>del lock:code

原文地址:https://www.cnblogs.com/-cyh/p/14586815.html