知识卡片
缓存穿透——两种成因与应对
内容
缓存穿透指请求绕过缓存直接打到存储系统,常见两种情形:一是查询数据本身不存在,缓存从未写入对应记录,每次查询都打到底层确认”不存在”,解法是未命中时也写入默认值占位;二是缓存生成本身昂贵(如深分页),过期又被集中访问(如爬虫遍历),生成成本会压垮存储,无根治方案,只能靠限流监控缓解。发散:两种穿透的共同点是”缓存没覆盖某类请求”,区别是第一种能靠覆盖根治,第二种成本太高只能检测响应。
参考来源
- 位置:《从0开始学架构》第21章《17|高性能缓存架构》"缓存穿透"一节(源文件:_epub-src/OEBPS/Text/part0020_split_002.html)
- 结论依据:原文说明第一种情形"如果查询存储系统的数据没有找到,则直接设置一个默认值……存到缓存中"即可解决;第二种情形以电商分页为例"竞争对手用爬虫来遍历……很多分页缓存可能都失效了……这种情况并没有太好的解决方案……通常的应对方案要么就是识别爬虫然后禁止访问……要么就是做好监控"。
- 原始内容:如果查询存储系统的数据没有找到,则直接设置一个默认值(可以是空值,也可以是具体的值)存到缓存中……竞争对手用爬虫来遍历的时候,系统性能就可能出现问题……这种情况并没有太好的解决方案……要么就是做好监控,发现问题后及时处理。