低头凝望镜中月
不如关注木丘白
一步两步向前走
共同学习一起来
本篇文章针对redis分布式锁分享
前言
要实现分布式锁,我们先来考虑解决以下几个问题。
1.已经加了锁,还没来得及释放就出现了异常或者其他情况导致没有执行delete,造成死锁。
2.为了解决第一个问题,就会想到给锁加一个过期时间,但是setnx(set if not exist)和expire是两个操作,如果在两个操作间隙进程挂了,依然会导致死锁。
3.为了解决第二个问题呢,Redis的作者在2.8版本中做了改动,融合了setnx和expire命令,set lock:key true ex 5 nx,这就保证了原子性。
4.但是还存在另一个问题,在超时时间内程序没有完成业务处理,导致锁过期了,这时候第二个线程拿到锁,处理逻辑,而第一个线程处理完逻辑释放了锁,第三个线程又拿到了锁,这时候第二个线程和第三个线程就可能出现逻辑冲突了。
5.客户端1加的锁被客户端2删了,这显然不合理,怎么解决呢?
带着这几个问题看下面内容吧
分布式锁形成过程
结合前言内容我又画了张图辅助大家理解,如果手机太小看不清(你可以换手机了),可以用电脑登录微信观看哦