Redis分布式锁主要依靠Redis服务来完成,我们的应用程序其实是Redis节点的客户端,一旦客户端没有释放锁,服务端就会一直持有这个锁,其他进程中的线程就无法获取到这把锁,于是就会发生锁死的情况。所以我们在使用Redis分布式锁的时候,务必要设置锁的过期时间。
主要基于下面两点:

网络抖动

客户端A中的一个线程获取到了锁,然后执行finally中的释放锁的代码时,这时候网络出问题了,导致客户端A没有成功释放锁。此时对于redis服务端来说,它会一直把锁给客户端A,这样的话其他客户端自然也就不能获取到这个锁。

如果是设置了过期时间的话,即使客户端和服务端的网络不通了,服务端依然在进行时间的计算,时间到了直接把锁释放掉,等网络通了,不影响其他客户端获取锁。

Redis宕机

客户端A获取到了锁,Redis服务器突然宕机,锁没有释放。等到Redis再次恢复的时候,Redis服务端还会把锁给到客户端A,这样也会发生锁死的情况。

如果是设置了过期时间的话,服务器恢复后就会继续倒计时,时间到了服务器自动把锁释放,其他客户端也就可以尝试去获取锁了。

参考文章:
链接: https://blog.csdn.net/u013240038/article/details/100769664

Redis分布式锁为什么要设置超时时间相关推荐

  1. 记一次自定义Redis分布式锁导致的生产事件时间

    背景 企微报警群里连续发出生产环境报错警告,报错核心信息如下: redis setNX error java.lang.NumberFormatException: For input string: ...

  2. 大家所推崇的Redis分布式锁真的就万无一失吗?

    在单实例JVM中,常见的处理并发问题的方法有很多,比如synchronized关键字进行访问控制.volatile关键字.ReentrantLock等常用方法.但是在分布式环境中,上述方法却不能在跨J ...

  3. Redis分布式锁奥义

    分布式锁 分布式系统进行逻辑处理的时候,经常会遇到并发问题,例如直播场景中,用户需要连麦主播,当多个用户在同一个时刻一起连麦时候,应该保证只有一个用户能连麦成功,我们改怎么保证这种业务场景下保证数据的 ...

  4. 火影专场:Redis分布式锁实战

    火影专场:Redis分布式锁实战 我们学习 Java 都知道锁的概念,例如基于 JVM 实现的同步锁 synchronized,以及 jdk 提供的一套代码级别的锁机制 lock,我们在并发编程中会经 ...

  5. Redis入门(七):Redis分布式锁(单机模式/集群模式)

    Redis 实现分布式锁 单机模式的Redis分布式锁 集群模式的Redis分布式锁 Redlock Redis 实现分布式锁 单机模式的Redis分布式锁 优缺点 实现比较轻,大多数时候能满足需求: ...

  6. 分布式锁、ZK分布式锁、Redis分布式锁

    常见的分布式锁实现方案:ZK分布式锁.Redis分布式锁 ZK分布式锁: 原理:使用ZK 的临时有序节点.节点的监听机制来实现的. 锁特点:悲观锁,公平锁 获取锁:客户端A在/mylock节点目录下创 ...

  7. 分布式锁的过期时间设置多长合适_科普:Redis 分布式锁进化史(解读 + 缺陷分析)...

    近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Z ...

  8. redis订阅执行一段时间自动停止_面试系列 redis 分布式锁amp;数据一致性

    分布式锁 多个系统同时操作一个redis,因为jvm锁是线程级别的,所以没有办法锁住多个系统. Redis锁实现: setnx key value 只有在key不存在时设置key的值 此时key相当于 ...

  9. redis desktop manager_面试官:Redis分布式锁如何解决锁超时问题?

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:wangzaiplus 来源:https://www.jianshu.com/u/8cb4591440ca 一.前言 关 ...

  10. redis续期_面试官:Redis分布式锁如何解决锁超时问题的?

    一.前言 关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题 ...

最新文章

  1. ASP.NET中随机数生成及应用
  2. 为什么三层交换机无法替代路由器?
  3. android imageview 图片切换动画,在Android中以动画方式将ImageView移动到不同的位置...
  4. ACM算法--spfa算法--最短路算法
  5. Redis你不得不探索的11个问题
  6. Hadoop序列化与Java序列化
  7. 一部分 数据 迁移_超原版速度110倍,针对PyTorch的CPU到GPU张量迁移工具开源
  8. Opencv3.4.2调用yolov2进行物体检测源代码
  9. 等值线图的Python绘制方法
  10. Flutter 实现整个App变为灰色
  11. 如何用proe/croe将三维文件转为二维CAD轴侧图
  12. 微众银行客服电话是95384 认准官方的人工客服电话
  13. Unity 自发光(燃烧)溶解Shader
  14. 如何计算每个月有多少天
  15. Pygame mixer 模块
  16. 搭建深度学习后台服务器
  17. 关于CStdioFile
  18. 可视化工具VisIt安装使用教程(Windows)
  19. centos配置启动项_查看centos开机启动项命令 - 老牛博客
  20. 所属技术领域技术人员的知识和能力

热门文章

  1. badboy html5,html5_ol.htm
  2. PyTorch搭建AlexNet模型(在CIFAR10数据集上准确率达到了85%)
  3. mysql建三行三列表格_基于另一个表中列的名称在mysql中创建表
  4. presto执行一条查询分为七步
  5. 决策控制方法:sequential 规划、behavior-aware规划、端到端规划
  6. 过拟合的含义、出现原因及解决方案
  7. uva1583-digit generator
  8. 提交不了_领导嘲讽程序员代码太过整洁,网友:太矫情,这种代码提交不了
  9. 维基百科简体中文语料的获取
  10. 如何通过玩TensorFlow Playground来理解神经网络