Redis分布式锁为什么要设置超时时间
Redis分布式锁主要依靠Redis服务来完成,我们的应用程序其实是Redis节点的客户端,一旦客户端没有释放锁,服务端就会一直持有这个锁,其他进程中的线程就无法获取到这把锁,于是就会发生锁死的情况。所以我们在使用Redis分布式锁的时候,务必要设置锁的过期时间。
主要基于下面两点:
网络抖动
客户端A中的一个线程获取到了锁,然后执行finally中的释放锁的代码时,这时候网络出问题了,导致客户端A没有成功释放锁。此时对于redis服务端来说,它会一直把锁给客户端A,这样的话其他客户端自然也就不能获取到这个锁。
如果是设置了过期时间的话,即使客户端和服务端的网络不通了,服务端依然在进行时间的计算,时间到了直接把锁释放掉,等网络通了,不影响其他客户端获取锁。
Redis宕机
客户端A获取到了锁,Redis服务器突然宕机,锁没有释放。等到Redis再次恢复的时候,Redis服务端还会把锁给到客户端A,这样也会发生锁死的情况。
如果是设置了过期时间的话,服务器恢复后就会继续倒计时,时间到了服务器自动把锁释放,其他客户端也就可以尝试去获取锁了。
参考文章:
链接: https://blog.csdn.net/u013240038/article/details/100769664
Redis分布式锁为什么要设置超时时间相关推荐
- 记一次自定义Redis分布式锁导致的生产事件时间
背景 企微报警群里连续发出生产环境报错警告,报错核心信息如下: redis setNX error java.lang.NumberFormatException: For input string: ...
- 大家所推崇的Redis分布式锁真的就万无一失吗?
在单实例JVM中,常见的处理并发问题的方法有很多,比如synchronized关键字进行访问控制.volatile关键字.ReentrantLock等常用方法.但是在分布式环境中,上述方法却不能在跨J ...
- Redis分布式锁奥义
分布式锁 分布式系统进行逻辑处理的时候,经常会遇到并发问题,例如直播场景中,用户需要连麦主播,当多个用户在同一个时刻一起连麦时候,应该保证只有一个用户能连麦成功,我们改怎么保证这种业务场景下保证数据的 ...
- 火影专场:Redis分布式锁实战
火影专场:Redis分布式锁实战 我们学习 Java 都知道锁的概念,例如基于 JVM 实现的同步锁 synchronized,以及 jdk 提供的一套代码级别的锁机制 lock,我们在并发编程中会经 ...
- Redis入门(七):Redis分布式锁(单机模式/集群模式)
Redis 实现分布式锁 单机模式的Redis分布式锁 集群模式的Redis分布式锁 Redlock Redis 实现分布式锁 单机模式的Redis分布式锁 优缺点 实现比较轻,大多数时候能满足需求: ...
- 分布式锁、ZK分布式锁、Redis分布式锁
常见的分布式锁实现方案:ZK分布式锁.Redis分布式锁 ZK分布式锁: 原理:使用ZK 的临时有序节点.节点的监听机制来实现的. 锁特点:悲观锁,公平锁 获取锁:客户端A在/mylock节点目录下创 ...
- 分布式锁的过期时间设置多长合适_科普:Redis 分布式锁进化史(解读 + 缺陷分析)...
近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Z ...
- redis订阅执行一段时间自动停止_面试系列 redis 分布式锁amp;数据一致性
分布式锁 多个系统同时操作一个redis,因为jvm锁是线程级别的,所以没有办法锁住多个系统. Redis锁实现: setnx key value 只有在key不存在时设置key的值 此时key相当于 ...
- redis desktop manager_面试官:Redis分布式锁如何解决锁超时问题?
Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:wangzaiplus 来源:https://www.jianshu.com/u/8cb4591440ca 一.前言 关 ...
- redis续期_面试官:Redis分布式锁如何解决锁超时问题的?
一.前言 关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题 ...
最新文章
- ASP.NET中随机数生成及应用
- 为什么三层交换机无法替代路由器?
- android imageview 图片切换动画,在Android中以动画方式将ImageView移动到不同的位置...
- ACM算法--spfa算法--最短路算法
- Redis你不得不探索的11个问题
- Hadoop序列化与Java序列化
- 一部分 数据 迁移_超原版速度110倍,针对PyTorch的CPU到GPU张量迁移工具开源
- Opencv3.4.2调用yolov2进行物体检测源代码
- 等值线图的Python绘制方法
- Flutter 实现整个App变为灰色
- 如何用proe/croe将三维文件转为二维CAD轴侧图
- 微众银行客服电话是95384 认准官方的人工客服电话
- Unity 自发光(燃烧)溶解Shader
- 如何计算每个月有多少天
- Pygame mixer 模块
- 搭建深度学习后台服务器
- 关于CStdioFile
- 可视化工具VisIt安装使用教程(Windows)
- centos配置启动项_查看centos开机启动项命令 - 老牛博客
- 所属技术领域技术人员的知识和能力
热门文章
- badboy html5,html5_ol.htm
- PyTorch搭建AlexNet模型(在CIFAR10数据集上准确率达到了85%)
- mysql建三行三列表格_基于另一个表中列的名称在mysql中创建表
- presto执行一条查询分为七步
- 决策控制方法:sequential 规划、behavior-aware规划、端到端规划
- 过拟合的含义、出现原因及解决方案
- uva1583-digit generator
- 提交不了_领导嘲讽程序员代码太过整洁,网友:太矫情,这种代码提交不了
- 维基百科简体中文语料的获取
- 如何通过玩TensorFlow Playground来理解神经网络