3-分布式锁的实现

一 、 使用redis 实现分布式锁

          使用步骤

         1.setnx(lockkey,1)  如果返回  0 说明失败,返回1 说明成功。

         2. 使用expire() 设置超时时间,避免死锁

         3.执行完代码以后使用 delete 命令删除 key

 

缺点: 当第一步执行成功以后,这时候如果机器宕机,这样的话 会造成死锁。

        第二种方式:

         1.setnx(lockkey,当前时间+过期时间) 1 设置成功    0 失败

         2.get(lockkey)    获取时间 oldExpireTime 和当前的系统时间进行比较,小于当前时间的话说明锁已经超时,别人可以请求,转向 3

    3.计算newExpireTime  =当前时间 + 过期时间  使用getset(lockkey,newExpireTime)会返回当前的  lokkey的值 currentExpireTime  

         4.判断currentExpireTime与oldExpireTime  是否相等,相等的话说明这期间没有别的线程进行操作,获取锁成功,否则失败

        5.在获取到锁治好后,当前的线程可以开始进行自己的业务处理,处理完毕以后小于超时时间,进行删除,大于超时时间不需要进行任何操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值