怎么定位 Redis 缓存失效问题(缓存坏了)

如果大家想看更多关于中间件测试的面试题,可以给此文章点个赞

问题

怎么定位 Redis 缓存失效问题(缓存坏了)?

答案解析

什么是缓存失效

简单来说就是由于各种原因导致的缓存不可用,而让原本应该打在redis的请求,直接打到了数据库上。

为什么会产生缓存失效

缓存失效对应的一般是以下这四个原因:

  • 缓存过期

如果缓存不设计过期时间,那么就永久的占据一块内存,所以通常都会为缓存设计过期时间,一旦缓存过期,缓存数据则完全失效。

  • 缓存更新

缓存的更新通常采用“淘汰策略”,一般更新完数据库之后,会直接把缓存淘汰掉,这样在下次用户请求中,如果没有在缓存中拿到信息就会去数据库读取,在向数据库读取成功之后,数据库则会反写到 redis。

但是在这个过程中,有一个极短的时间是没有缓存数据的,如果在这个极短的时间内,正好有大量的请求打进来,那么就会直接打到数据库上面。

  • Redis 异常

Redis 异常的话,自然请求也是直接全部打到了数据库,而导致数据库崩溃。

  • 网络异常

网络异常和 Redis 异常逻辑相同。

如何解决缓存失效问题

针对于由于各种情况可能产生的缓存失效问题,研发是如何解决的?通常有两种方式:

  • 降级: 禁用部分接口,开放核心接口。

  • 熔断: 禁用部分服务,开放核心服务。

很多同学看到这两种方式可能很难理解,如果禁用部分接口或服务的话,直接导致的问题就是应用的某些功能是不可用的,依然会影响到用户体验。但是其实这个过程,好比一个人被烧伤,他的手臂已经坏死,医生常常也会抛出这样两难的选择,如果不选择切除手臂,那么48小时之后,人就会因为感染而死亡。所以在这种情况下,大部分人都会选择“自断一臂”。

熔断和降级根本目的也是这个,有的用比完全瘫痪强,核心服务可用更比完全瘫痪强。

缓存失效相关的测试点

对于测试来说,除了考虑有哪些原因可能导致缓存失效,我们尽量规避外。还要检查了解到如果真的发生缓存失效的问题,研发是否有对应的解决方案,而不是缓存一失效,系统就瘫痪完全无法使用了。

比如在缓存失效下,可以使用如下的测试步骤,验证降级或者熔断功能的能力:

  1. 梳理系统中的核心服务列表(通常直接让研发给出对应列表)

  2. 梳理服务中核心接口列表(通常直接让研发给出对应列表)

  3. 模拟Redis失效,查看redis失效之后,这些核心服务和核心接口是否还能正常运行

模拟 redis 缓存失效其实比较简单。其中,直接使用命令切断 redis 和服务的网络连接是最简单的方式。比如使用IPTABLESTC命令。以及阿里云的ChaosBlade命令工具也可以非常容易的实现。

总结

面试碰到这个问题,可以从以下3个角度进行回答

  • Redis 失效是什么?

  • Redis 失效的原因是什么?

  • Redis 失效研发应该在哪些方面做什么处理,以及测试是如何去测试的进行回答。

1 个赞