Redis集群:远程主机强迫关闭了一个现有的连接。

本文探讨了在使用Redisson操控Redis分布式锁时遇到的超时和锁定问题,作者通过实例分析了tryLock与lock的区别,以及解锁操作的意外行为,揭示了代码错误和底层实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这种情况有可能是获取不到锁,然后超时了。
tryLock()也是加锁,只是返回布尔值。

错误定位、分析

在项目中用到Redisson操控Redis集群实现分布式锁,加锁的请求第一次使用还是正常,第二次使用的时候发现会超时、并报错:远程主机强迫关闭了一个现有的连接。
在这里插入图片描述

于是就再写了一个测试接口来看看更多的情况。由于zipkin配置了只打印error级别的日志,所以这里就暂时使用sout来进行输出了。。。。

在这里插入图片描述

测试接口时发现锁并没有被释放,怪不得会超时。
在这里插入图片描述
首先熟悉Redisson的API的人可能知道,tryLock()的时候就已经回去加锁了,所以很显然是我的代码有问题。但是即使把tryLock()去掉,结果也依然是没有解锁。而之后再unlock()后面加多一个forceUnlock()才可以正常解锁,少了unlock也不行。
在这里插入图片描述
我觉得很奇怪。甚至反复去确认redis集群的配置、redisson配置的。后来再看了一遍demo代码,发现tryLock()和lock()总共锁了两次。而我值unlock了一次。。。。。。。被自己坑了一天(归根结底还是基础不扎实 T^T )

trylock和lock区别

trylock和lock都是加锁,两者都可以重入,区别在于:

  • lock会阻塞等待
  • trylock会直接返回结果

trylock实现机制(源码): https://www.jianshu.com/p/245fdb188e87

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值