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

SpringBoot 应用中 redis 挂掉如何保证不报错而是从数据库中查询数据?

  •  
  •   EscYezi ·
    yeziyezi · 2020-03-30 21:00:23 +08:00 via iPhone · 3618 次点击
    这是一个创建于 1700 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搜索一番只找到了一个方法:把 redis 取数据的操作放在 try catch 中

    感觉这个方法似乎有效但是不太稳妥?毕竟 try catch 也是要耗性能的,有没有更好的实现方式呢

    12 条回复    2020-03-31 14:52:53 +08:00
    gscoder
        1
    gscoder  
       2020-03-30 21:05:51 +08:00   ❤️ 1
    熔断降级了解一下 Hystrix 。 原理很简单,自己也可以实现:用一个标志位标记 redis 的健康状态,在一次失败 /n 次失败后,操作跳过 redis
    gaobing
        2
    gaobing  
       2020-03-30 21:11:34 +08:00   ❤️ 1
    肯定不能一直 try catch,使用标志位,catch 里面 flag 设为 false,再开一个定时任务线程 测试 redis 状态,好了的话改为 true 。
    if(flag){
    try{
    //redis 操作
    } catch {
    flag = false ;
    //再开一个定时任务线程 测试 redis 状态
    }
    } else{
    // 数据库操作
    }
    xuanbg
        3
    xuanbg  
       2020-03-30 21:15:37 +08:00
    如果 redis 挂掉,你这数据库能扛得住么……扛不住不就全都挂掉了吗。所以啊,怕 redis 挂掉,就得搞集群,让它不会挂掉啊。
    yongliu
        4
    yongliu  
       2020-03-30 21:51:03 +08:00
    自己创建一个 CacheErrorHandler bean,具体可以参考下这里:
    https://hellokoding.com/spring-caching-custom-error-handler/
    des
        5
    des  
       2020-03-30 22:04:19 +08:00
    redis 挂掉你就不怕数据库炸掉 ?
    lovedebug
        6
    lovedebug  
       2020-03-30 22:23:23 +08:00   ❤️ 1
    EscYezi
        7
    EscYezi  
    OP
       2020-03-30 22:40:37 +08:00 via iPhone
    @xuanbg 现在 redis 是有集群的,只是考虑到有极端情况比如网络波动之类
    hantsy
        8
    hantsy  
       2020-03-30 22:56:51 +08:00   ❤️ 1
    Spring Retry
    huntcool001
        9
    huntcool001  
       2020-03-30 23:07:03 +08:00   ❤️ 1
    @EscYezi 可以跨可用区部署 redis 集群.
    xuanbg
        10
    xuanbg  
       2020-03-31 04:07:33 +08:00
    @EscYezi 你要这么想的话,这活就没法干了,这世界上哪有万全的事情呢。所以你的系统要允许失败,只要失败不会造成数据的错乱就可以了。
    Ahaochan
        11
    Ahaochan  
       2020-03-31 09:30:12 +08:00
    开集群,开熔断,还要更高可用性就两地三中心,再高就上月球基地部署服务器
    Aresxue
        12
    Aresxue  
       2020-03-31 14:52:53 +08:00
    集群熔断降级重启定时扫描
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2409 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:22 · PVG 08:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.