V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lbllol365
V2EX  ›  问与答

redisson 锁因应用被 kill 导致无法释放问题

  •  
  •   lbllol365 · 2023-07-17 18:30:51 +08:00 · 796 次点击
    这是一个创建于 496 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个 redisson 锁,加了超时时间。每次发版重启,应用被 kill ,导致 finally 代码块里的锁释放代码不能执行,然后锁也不能释放。重启后这个锁就被空占着,代码也跑不了

    请教各位,这个怎么能处理一下吗? del 掉锁的 key ,应该还得在 redis 里 publish 一条消息,可我不知道参数。再就是等锁自己过期

    8 条回复    2023-07-18 10:29:18 +08:00
    zoharSoul
        1
    zoharSoul  
       2023-07-17 18:42:21 +08:00
    优雅重启
    lbllol365
        2
    lbllol365  
    OP
       2023-07-17 18:46:18 +08:00
    @zoharSoul 用的 k8s + tomcat ,优雅重启是指用个比较温和一点的 kill 参数吗?然后挂一个进程结束钩子?
    wetalk
        3
    wetalk  
       2023-07-17 18:51:15 +08:00
    请求跑到一半,服务被 kill 了咋办你想过没.. 类似的
    lbllol365
        4
    lbllol365  
    OP
       2023-07-17 18:54:58 +08:00
    @wetalk 我这块用锁的东西是比较幂等的,今天应用挂了,三天内重跑几次都可以
    connor123
        5
    connor123  
       2023-07-17 19:01:31 +08:00
    @lbllol365 #2 优雅重启的话,就是等代码任务执行结束后,再退出 tomcat ,这样就不会出现你说的这种问题。
    potatowish
        6
    potatowish  
       2023-07-17 19:31:48 +08:00 via iPhone
    设置 leaseTime ,或者用 redlock
    cylx3124
        7
    cylx3124  
       2023-07-18 09:48:34 +08:00
    直接 kill 的话,不只是 redisson 锁会出问题,应用里开启的事务、内存队列也都会受影响。

    tomcat 的 bin 目录下有自带的 shutdown.sh 脚本,用这个替换 kill 命令试试。
    liuzhaowei55
        8
    liuzhaowei55  
       2023-07-18 10:29:18 +08:00 via iPhone
    超时时间设太久了?正常应用启动时间几秒钟应该是够锁自动过期的了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2882 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:37 · PVG 20:37 · LAX 04:37 · JFK 07:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.