This topic created in 991 days ago, the information mentioned may be changed or developed.
这个锁不管是 redis 的,还是数据库实现的,反正就是远程的
总会有个问题,就是,如果服务重启的时候,锁没释放,那么服务重启后,总要等到锁失效了,才能继续执行相关业务,大家对于这类问题是怎么处理的呢。
我在考虑系统每次重启的时候,把所有这类锁全销毁一遍,不知道有没啥隐藏问题。😂
16 replies • 2023-09-20 13:15:56 +08:00
 |
|
1
lalawu Sep 20, 2023
想问一下这个锁是用在什么场景的,用来做什么的。
|
 |
|
2
cubecube Sep 20, 2023
锁超时设置短点不就好了。你一个重启完成也得挺长时间的
|
 |
|
3
msaionyc Sep 20, 2023
假设 A 服务有 2 个实例,重启的时候, 实例 1 在 9:45:00 重启完成,收到客户端请求,上了个锁 实例 2 在 9:45:01 重启完成,然后销毁所有锁,这岂不是把正常业务的锁也清理了?之后收到客户端请求就又可以加这把锁了,岂不是乱套了。
|
 |
|
4
stinkytofu Sep 20, 2023
"每次重启的时候,把所有这类锁全销毁一遍" 这不是一个最优解, 很不可靠, 假如机器死机 ,系统宕机, 进程被杀, 你根本就走不到正常的重启流程. 最好的就是像 2 楼说的, 把锁超时时间设置到尽量短, 满足业务需求即可
|
 |
|
5
yule111222 Sep 20, 2023
去看 Redission 的源码,锁有超时时间和自动续期机制,不能无限持有锁
|
 |
|
6
maocat Sep 20, 2023
突然想到一个问题
Redis 是主从配置, 给 master 节点添加锁,结果同步到从节点的时候,master 下线了,这个时候程序是怎么的呢
|
 |
|
7
thofx Sep 20, 2023
Redlock 了解一下
|
 |
|
8
8355 Sep 20, 2023
redis 锁肯定要加 ttl 的 不然万一你代码有 bug 不是直接锁死了。
服务重启 首先优雅停机了解一下 如果按照你这样做的话 在多台服务场景发布整体的时间没那么快,本来是依赖流量切分+优雅停机就可以解决的问题,你是不是把问题搞复杂了。。。。
|
 |
|
9
lozzow Sep 20, 2023
加锁然后开个任务自动刷新锁的 ttl
|
 |
|
12
IvanLi127 Sep 20, 2023
重启的时候,等自己上的锁自己释放完了再退出,可不能直接销毁。重启要等多久,最差情况就是就看你的锁多久超时了。
|
 |
|
13
victorc Sep 20, 2023
你这个想法是自然的,合乎逻辑的,就这样做吧
|
 |
|
14
cheng6563 Sep 20, 2023
Redis 做锁要一顿操作才能可靠使用,你看下 Redisson 库是怎么做的。 数据库实现用事务,服务停机断开连接就会自动回滚。
|
 |
|
15
Sezxy Sep 20, 2023
复杂点,锁 2s 超时,定时任务 1s 重置一次锁超时时间
|