✅Redis 如果挂了,你怎么办?

典型回答

这个题,一般是在你介绍完你的项目或者方案之后,因为你用到了 Redis,面试官就会问你,Redis挂了怎么办?

他不是想问你如何去恢复 Redis,这是运维干的事儿。那作为开发,如果 Redis 挂了,我们能怎么办呢?

首先,我们就是可以想办法减少 Redis 挂了的概率,以及降低挂了可能带来的影响,这主要就是哨兵模式、集群模式的一些东西了,这不展开了。

✅介绍一下Redis的集群模式?

如果就是真的挂了,怎么办?

发现问题

首先我们需要有机制可以发现 Redis 挂了,最常见的就是加监控了,一般对于 Redis 自己可以做监控,我们在业务中也可以基于 Redis 调用的成功率做一些监控,当发现长时间不可用,或者超时之后,就可以认为是 Redis 挂了,就需要考虑应急机制了。

限流&降级

当Redis 挂了,并且我们已经发现了,之后就需要考虑这个使用 Redis场景的降级问题了,就是说 Redis 不能用了,我需要切换到其他的方案上了,比如说订单的秒杀库存扣减场景,一般是先在 Redis 中做预扣减。如果Redis 挂了,那我们就得把 Redis 给他降级掉,那就是不要再调 Redis 了,而是直接去调数据库。

但是你加 Redis 的原因是因为数据库扛不住那么高并发, 咋办呢、

这时候就需要限流了,通过限流的手段,让请求不要这么多的都打到数据库中,在前面给他拦住一些流量,虽然对用户来说体验不一定好,但是至少我的数据库没有被打垮,至少我还能对一部分用户提供服务的。

但是这些都是需要你提前就做好设计的,你要是一点设计都没做,等 Redis 挂了之后在做这些,那肯定来不及了。

所以,如果你的场景严重依赖 Redis,那你就需要提前做好这个降级方案,甚至需要配置一个开关,在 Redis 挂了之后,一键切换成不调Redis,并且开启限流。。。这个玩意在大厂中叫做预案。

一般来说预案和故障是关联的,当线上出现了某个故障,可以直接触发预案执行。

备份

Redis挂了,如果有一个备用的能顶上,那也是可以的。所以,很多 Redis 的部署都是主备形式的,备份实例平时不对外提供服务,只和朱主实例做数据同步,保证数据的准确性。

然后在主实例挂了之后,我们就可以快速的切换到备份实例上面来。这就是因为提前做好了热备的方案,就可以在出现故障的时候做故障转移。

其实这背后就是一种冗余的思想,在很多大厂中,冗余非常常见,就是为了应对这种突发状况的。

甚至有的备份是不同的架构的备份,比如备份到 Mangodb中。。。

本地缓存

Redis 主要是用来做做缓存的, 提升性能的,如果 Redis 挂了,说明缓存就没了,那么还可以考虑降级到使用本地缓存来抗并发。

当然,本地缓存存在不一致的问题,这时候就根据你的业务来看了,能不能接受不一致,或者说是不是宁可系统挂了,也不能接受不一致。。。

原文: https://www.yuque.com/hollis666/xkm7k3/ni9yghphzz5utfhp