每日面经(极为经典,面试必考)
- 考察点:中间件的测试方法
- 难度: 较难
- 题目:中间件-redis击穿、穿透区别,如何设计用例以及完成测试?
ps:每周一公布上周所有题目答案
没人回复吗
击穿是某一个key多个并发在同一时间缓存过期,导致同一时间对数据库发起请求,从而使数据库崩溃
穿透是使用不存在的key访问系统,这样就不会过缓存,直接访问数据库
用例完整的考虑不到
1.击穿:服务器设置一个key,客户端发起并发,达到x数量后,将此key设置为过期,查看数据库不崩
2.穿透:找一个服务器内没有的key,发起请示,查看返回,需要做防护,返回对应的提示
redis穿透是指redis中没有key,数据库中也没有数据,指查询一个不存在的数据
redis缓存击穿:高并发请求redis缓存中没有数据,但DB有的数据(一般是缓存时间到期),引起DB压力瞬间增大,造成过大压力
区别是:穿透是数据库和缓存都没有数据,击穿是由于缓存数据过期,但是数据库有数据。
用例设计:
1.击穿:在大量并发下,一个key过期,观察下是否会崩,另外还可以看下,是否设计”永久“不过期;
2.穿透:模拟不断生产数据库及缓存中均不存在的key,进行查询,看下是否做相应处理,防止恶意攻击
答:
不好意思,redis 相关问题我不熟悉,这题我不会。下一题
老师,“熔断”“降级”能展开讲一讲吗?这俩和“限流”有什么关系吗?
针对于由于各种情况可能产生的缓存失效问题,研发是如何解决的?通常有两种方式:
很多同学看到这两种方式可能很难理解,如果禁用部分接口或服务的话,直接导致的问题就是应用的某些功能是不可用的,依然会影响到用户体验。但是其实这个过程,好比一个人被烧伤,他的手臂已经坏死,医生常常也会抛出这样两难的选择,如果不选择切除手臂,那么 48 小时之后,人就会因为感染而死亡。所以在这种情况下,大部分人都会选择“自断一臂”。
熔断和降级根本目的也是这个,有的用比完全瘫痪强,核心服务可用更比完全瘫痪强。