redis 分布式锁有什么缺陷

redis 分布式锁的缺陷:1、客户端长时间阻塞导致锁失效问题;2、redis服务器时钟漂移问题;3、单点实例安全问题。客户端长时间阻塞导致锁失效问题是指,某个客户端得到了锁,因为某些原因导致长时间阻塞,然后业务程序还没执行完锁就过期了。

redis 分布式锁有什么缺陷-Worktile社区

一、redis 分布式锁的缺陷

1、客户端长时间阻塞导致锁失效问题

客户端1得到了锁,因为网络问题或者GC等原因导致长时间阻塞,然后业务程序还没执行完锁就过期了,这时候客户端2也能正常拿到锁,可能会导致线程安全的问题。

2、redis服务器时钟漂移问题

如果redis服务器的机器时钟发生了向前跳跃,就会导致这个key过早超时失效,比如说客户端1拿到锁后,key的过期时间是12:02分,但redis服务器本身的时钟比客户端快了2分钟,导致key在12:00的时候就失效了,这时候,如果客户端1还没有释放锁的话,就可能导致多个客户端同时持有同一把锁的问题。

3、单点实例安全问题

如果redis是单master模式的,当这台机宕机的时候,那么所有的客户端都获取不到锁了,为了提高可用性,可能就会给这个master加一个slave,但是因为redis的主从同步是异步进行的,可能会出现客户端1设置完锁后,master挂掉,slave提升为master,因为异步复制的特性,客户端1设置的锁丢失了,这时候客户端2设置锁也能够成功,导致客户端1和客户端2同时拥有锁。

二、分布式锁需要满足的特性

  • 互斥性:在任何时刻,对于同一条数据,只有一台应用可以获取到分布式锁;
  • 高可用性:在分布式场景下,一小部分服务器宕机不影响正常使用,这种情况就需要将提供分布式锁的服务以集群的方式部署;
  • 防止锁超时:如果客户端没有主动释放锁,服务器会在一段时间之后自动释放锁,防止客户端宕机或者网络不可达时产生死锁;
  • 独占性:加锁解锁必须由同一台服务器进行,也就是锁的持有者才可以释放锁,不能出现你加的锁,别人给你解锁了。

延伸阅读

布式锁应该具备的条件

  • 在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行
  • 高可用的获取锁与释放锁
  • 高性能的获取锁与释放锁
  • 具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误)
  • 具备锁失效机制,即自动解锁,防止死锁
  • 具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败

文章标题:redis 分布式锁有什么缺陷,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/34730

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Z, ZLWZ, ZLW认证作者
上一篇 2023年1月8日 上午6:40
下一篇 2023年1月8日 上午6:59

相关推荐

  • 软件编程基础课学什么

    软件编程基础课通常包括编程语言概念、算法与数据结构、软件开发生命周期、版本控制及代码分析技巧。 在学习软件编程基础课的过程中,编程语言概念是最核心的部分。这涉及到计算机如何理解和执行指令,以及如何通过高级语言编写出有效的程序。学习者会被引导去理解不同编程语言的语法、关键字、控制结构和数据类型。例如,…

    2024年4月27日
    800
  • 编程人最怕听到什么音乐

    编程人最怕听到的音乐是无规律的噪音,如电脑故障发出的嘟嘟声或系统崩溃时发出的声音。这种音乐通常与工作中的不确定性和潜在的问题联系在一起,可以导致心理上的紧张和压力。例如,当一位程序员正在专心工作时,电脑突然发出连续的报错声音,这很可能是系统出现错误的警告声,可能预示着长时间辛苦编写的代码因某些错误而…

    2024年4月27日
    900
  • 有什么回答编程软件

    有什么回答编程软件? 编程软件的选择范围广泛,主要包括1、文本编辑器,2、集成开发环境(IDE),3、版本控制系统,4、数据库管理系统,5、调试工具。其中,集成开发环境(IDE) 相对于其他编程工具,提供了一个完善的工作环境,集成了代码编写、调试、编译等多项功能于一体,极大地提高了开发效率。例如,对…

    2024年4月25日
    1600
  • 为什么测试人要学编程

    测试人员学习编程有多个重要原因:1、提高自动化测试效率和准确性;2、增强对软件内部工作机制的理解;3、拓宽职业发展路径。 其中,提高自动化测试的效率和准确性是一个重要理由。编程技能可以帮助测试人员编写和执行自动化测试脚本,节省了大量手工测试的时间和精力,同时,通过编写代码来测试另一段代码,可以显著提…

    2024年4月27日
    600
  • 单片机编程推荐语言是什么

    单片机编程推荐语言包括1、C语言;2、汇编语言。对绝大多数开发者而言,C语言由于其简单性、灵活性和高效性,是进行单片机编程的首选。它为程序员提供了接近硬件层次的控制能力,同时还能够被用来开发可移植的程序。此外,C语言在资源受限的单片机上运行可以得到较好的性能表现。对于需要极度优化资源使用的场景,汇编…

    2024年4月27日
    300
  • 如何加强项目流程管理能力

    项目流程管理能力的加强涉及明确项目目标、优化团队沟通、制定详尽项目计划、实施有效的进度跟踪、风险管理、质量控制以及持续改进等多个方面。其中,制定详尽的项目计划尤为关键,它包括确定项目范围、设定具体的里程碑和截止日期、分配资源和预算、制定风险应对策略等。一个详尽的项目计划能够为项目团队提供清晰的指南,…

    2024年4月10日
    4900
  • 编程的前驱是什么意思

    编程的前驱意味着计算机科学和数学领域的基础理论以及最早期的机械计算设备的出现和发展。其中,详细描述最早期的机械计算设备的历史意义:它们是现代计算机编程的雏形和基石。例如,查尔斯·巴贝奇的差分机和分析机被认为是最早的计算机设备之一,它们采用了存储程序的概念,为后来的电子计算机及其编程语言的设计奠定了基…

    2024年4月27日
    600
  • 编程能做出什么成就感

    编程能够带来诸多成就感,主要表现在1、解决实际问题、2、创造创新产品、3、不断学习与成长中。尤其值得深入探讨的是解决实际问题。编程不仅能够帮助人们处理日常工作中遇到的各种繁琐问题,还能在更大范围内解决社会、经济乃至环境方面的挑战。通过编写代码,开发者能够构建出解决特定问题的应用程序或系统,这不仅能提…

    2024年4月27日
    400
  • 递归思想为什么是编程的基本思想

    递归思想的基本思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。用递归思想写出的程序往往十分简洁易懂。  一、递归的基本思想 递归并不是简单的自己调用自己,也不是简单的交互调用。递归在于…

    2023年2月9日
    64000
  • 广州数控编程代码是什么

    广州数控编程代码是一套专用于指导数控机床运作的编程语言,包括1、G代码(几何代码),2、M代码(辅助功能代码)。特别是G代码,它是数控编程中不可或缺的部分,用于控制机床的具体运动,比如直线插补、圆弧插补等,实现精确的加工路径。 一、数控编程概述 数控编程是现代制造业中的关键技术之一,尤其在广州这样的…

    2024年4月27日
    800

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部