V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NoKey
V2EX  ›  程序员

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

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

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

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