微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分布式锁原理和使用

本地锁只能锁住当前服务,但是在分布式场景时就展现出了缺陷,无法锁住其它服务。




如果执行业务时出现异常,没有释放锁,则会出现死锁问题,考虑trycatch,但是若机器断电或其它问题,则还是死锁。故应该设置过期时间


此时若设置锁后,还没设置失效时间时,电脑断电了,依然死锁。需要将获取锁和设置过期时间更改为原子操作


此时解决上述问题,但是删锁时若业务较长,删锁时,锁已经过期了,此时第二个线程进入拿到新的锁,而第一个线程把第二个线程握住的锁给删除,导致第三个线程可以拿到锁。故应该让每个线程可以区分该删除的锁是自己的锁,并且保证原子操作,应使用redis官方提供的一个脚本来进行操作。

if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐