1、Redis分布式锁
一、线程调用setnx(lockkey,currentTime+timeout),设置成功,也就是返回true,给这个key设置有效期;
二、设置成功,调用expire(lockkey,timeout),设置锁的过时时间,执行业务,而后调用del(lockkey),释放锁。
三、设置失败,表示当前锁正在使用,则调用get(lockkey) 获得valueA;
四、若是valueA!=null && currentTime (当前时间毫秒数)>valueA,表示超时,执行5;
五、超时时,调用getset(lockkey,currentTime+timeout) 获得valueB,若是valueB ==null || valueA == valueB,得到锁操做步骤6,不然说明锁被其余线程获取了;
六、处理完业务逻辑,再去判断锁是否超时,若是没超时删除锁,若是已超时,不用处理。
流程如图: node