• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX  ›  程序员

redis 锁在服务重启的时候怎么处理呢?

  •  
  •   NoKey · Sep 20, 2023 · 3084 views
    This topic created in 1144 days ago, the information mentioned may be changed or developed.
    这个锁不管是 redis 的,还是数据库实现的,反正就是远程的
    总会有个问题,就是,如果服务重启的时候,锁没释放,那么服务重启后,总要等到锁失效了,才能继续执行相关业务,大家对于这类问题是怎么处理的呢。
    我在考虑系统每次重启的时候,把所有这类锁全销毁一遍,不知道有没啥隐藏问题。😂
    16 replies  •  2023-09-20 13:15:56 +08:00
    lalawu
    lalawu
    Sep 20, 2023
    1
    想问一下这个锁是用在什么场景的,用来做什么的。
    cubecube
    cubecube
    Sep 20, 2023
    2
    锁超时设置短点不就好了。你一个重启完成也得挺长时间的
    msaionyc
    msaionyc
    Sep 20, 2023
    3
    假设 A 服务有 2 个实例,重启的时候,
    实例 1 在 9:45:00 重启完成,收到客户端请求,上了个锁
    实例 2 在 9:45:01 重启完成,然后销毁所有锁,这岂不是把正常业务的锁也清理了?之后收到客户端请求就又可以加这把锁了,岂不是乱套了。
    stinkytofu
    stinkytofu
    Sep 20, 2023
    4
    "每次重启的时候,把所有这类锁全销毁一遍" 这不是一个最优解, 很不可靠, 假如机器死机 ,系统宕机, 进程被杀, 你根本就走不到正常的重启流程. 最好的就是像 2 楼说的, 把锁超时时间设置到尽量短, 满足业务需求即可
    yule111222
    yule111222
    Sep 20, 2023
    5
    去看 Redission 的源码,锁有超时时间和自动续期机制,不能无限持有锁
    maocat
    maocat
    Sep 20, 2023
    6
    突然想到一个问题

    Redis 是主从配置, 给 master 节点添加锁,结果同步到从节点的时候,master 下线了,这个时候程序是怎么的呢
    thofx
    thofx
    Sep 20, 2023
    7
    Redlock 了解一下
    8355
    8355
    Sep 20, 2023
    8
    redis 锁肯定要加 ttl 的
    不然万一你代码有 bug 不是直接锁死了。

    服务重启 首先优雅停机了解一下
    如果按照你这样做的话
    在多台服务场景发布整体的时间没那么快,本来是依赖流量切分+优雅停机就可以解决的问题,你是不是把问题搞复杂了。。。。
    lozzow
    lozzow
    Sep 20, 2023
    9
    加锁然后开个任务自动刷新锁的 ttl
    NoKey
    NoKey
    OP
    Sep 20, 2023
    10
    @msaionyc 阿西吧,你说对了,主要问题应该是这个,一下给忘了🤣
    endoffight
    endoffight
    Sep 20, 2023
    11
    所以这里 redis 应该是多实例的
    IvanLi127
    IvanLi127
    Sep 20, 2023
    12
    重启的时候,等自己上的锁自己释放完了再退出,可不能直接销毁。重启要等多久,最差情况就是就看你的锁多久超时了。
    victorc
    victorc
    Sep 20, 2023
    13
    你这个想法是自然的,合乎逻辑的,就这样做吧
    cheng6563
    cheng6563
    Sep 20, 2023
    14
    Redis 做锁要一顿操作才能可靠使用,你看下 Redisson 库是怎么做的。
    数据库实现用事务,服务停机断开连接就会自动回滚。
    Sezxy
    Sezxy
    Sep 20, 2023
    15
    复杂点,锁 2s 超时,定时任务 1s 重置一次锁超时时间
    potatowish
    potatowish
    Sep 20, 2023 via iPhone
    16
    看看 redisson watchdog 的机制
    https://instaer.me/article/Gvr01g
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   990 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 17:23 · PVG 01:23 · LAX 09:23 · JFK 12:23
    ♥ Do have faith in what you're doing.