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

2020-03-30 21:00:23 +08:00
 EscYezi

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

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

3649 次点击
所在节点    Java
12 条回复
gscoder
2020-03-30 21:05:51 +08:00
熔断降级了解一下 Hystrix 。 原理很简单,自己也可以实现:用一个标志位标记 redis 的健康状态,在一次失败 /n 次失败后,操作跳过 redis
gaobing
2020-03-30 21:11:34 +08:00
肯定不能一直 try catch,使用标志位,catch 里面 flag 设为 false,再开一个定时任务线程 测试 redis 状态,好了的话改为 true 。
if(flag){
try{
//redis 操作
} catch {
flag = false ;
//再开一个定时任务线程 测试 redis 状态
}
} else{
// 数据库操作
}
xuanbg
2020-03-30 21:15:37 +08:00
如果 redis 挂掉,你这数据库能扛得住么……扛不住不就全都挂掉了吗。所以啊,怕 redis 挂掉,就得搞集群,让它不会挂掉啊。
yongliu
2020-03-30 21:51:03 +08:00
自己创建一个 CacheErrorHandler bean,具体可以参考下这里:
https://hellokoding.com/spring-caching-custom-error-handler/
des
2020-03-30 22:04:19 +08:00
redis 挂掉你就不怕数据库炸掉 ?
lovedebug
2020-03-30 22:23:23 +08:00
EscYezi
2020-03-30 22:40:37 +08:00
@xuanbg 现在 redis 是有集群的,只是考虑到有极端情况比如网络波动之类
hantsy
2020-03-30 22:56:51 +08:00
Spring Retry
huntcool001
2020-03-30 23:07:03 +08:00
@EscYezi 可以跨可用区部署 redis 集群.
xuanbg
2020-03-31 04:07:33 +08:00
@EscYezi 你要这么想的话,这活就没法干了,这世界上哪有万全的事情呢。所以你的系统要允许失败,只要失败不会造成数据的错乱就可以了。
Ahaochan
2020-03-31 09:30:12 +08:00
开集群,开熔断,还要更高可用性就两地三中心,再高就上月球基地部署服务器
Aresxue
2020-03-31 14:52:53 +08:00
集群熔断降级重启定时扫描

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/657712

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX