浅谈redis分布式锁的实现过程
2021/11/5 19:10:27
本文主要是介绍浅谈redis分布式锁的实现过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
说到分布式锁,我们都会想到setNx命令,存在就不更新,不存在就更新成功,根据这个命令,看如下代码有啥问题?
1.上面的分布式锁实现会出现的问题: 如果代码执行到减库存的操作,此时服务挂了,如断电了,那么就会导致死锁,其他线程永远都进不来了
解决方案:加个过期时间,如加了10s
2. 上面加了过期时间后,会有啥问题?如果代码刚执行到添加过期时间那里,就挂了,那么此时还是会死锁,所以需要加锁和设置过期时间是原子操作,因此改进:
3.上面这样实现后,会有啥问题?
4.上面的问题就是因为线程A因为超时,然后删除了线程B的锁,解决方案,删除锁之前先判断是不是自己加的锁
5.上面这样写能解决问题了吗?
6. 如何解决上面问题?方案是要保证判断锁是否自己的和删除锁的操作是原子操作,此时可以使用lua脚本
7. 这些问题都解决后,还是会有问题,也就是最大的问题,key超时了
8. 如何解决:需要开一个线程,每隔一段时间就给锁进行续命
至此,redis分布式锁基本解决,但代码会非常复杂,还好,很多框架都实现了该逻辑,redis官网对这种实现方式定义了一种规范和一种称为redlock的算法,对应的java实现是redisson
这篇关于浅谈redis分布式锁的实现过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识