分布式锁的缘由
我们都知道 可以通过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