您的位置: 首页 > 技术专栏

缓存技术之缓存穿透

来源:华信智原  |  发布时间:2021-06-16  |  浏览量:508

1. 什么是缓存穿透?

正常情况下用户请求一个数据时会携带标记性的参数(比如id),而我们的缓存key则会以这些标记性的参数来划分不同的cache value,然后我们根据这些参数去查缓存,查到就返回,否则回源,然后写入cache服务后返回。

这个过程看起来也没什么问题,但是某些情况下,根据带进来的参数,在数据库里并不能找到对应的信息,这个时候每次带有这种参数的请求,都会走到数据库回源,这种现象叫做缓存穿透,比较典型的出现这种问题的情况有:

  1. 恶意攻击或者爬虫,携带数据库里本就不存在的数据做参数回源

  2. 公司内部别的业务方调用我方的接口时,由于沟通不当或其他原因导致的参数大量误传

  3. 客户端bug导致的参数大量误传

2. 如何解决缓存穿透问题?

目前我们提倡的做法是回源查不到信息时直接缓存空数据(注意:空数据缓存的过期时间要尽可能小,防止无意义内容过多占用Cache内存),这样即便是有参数误传、恶意攻击等情况,也不会每次都打进DB。

但是目前这种做法仍然存在被攻击的风险,如果恶意攻击时携带少量参数还好,这样不存在的空数据缓存仅仅会占用少量内存,但是如果攻击者使用大量穿透攻击,携带的参数千奇百怪,这样就会产生大量无意义的空对象缓存,使得我们的缓存服务器内存暴增。

这个时候就需要服务端来进行简单的控制:按照业务内自己的估算,合理的id大致在什么范围内,比如按照用户id做标记的缓存,就直接在获取缓存前判断所传用户id参数是否超过了某个阈值,超过直接返回空。(比如用户总量才几十万或者上百万,结果用户id传过来个几千万甚至几亿明显不合理的情况)

相关新闻

24小时报名热线

400-7777-699

报名热线:400-7777-699

微博

微信公众号

友情链接 :智原在线   美味学院   安徽新华电脑   安徽新华教育

华信智原(官网)|京ICP备09028087号-8|咨询热线:400-7777-699|地址:北京海淀区北三环中路44号院爱工场文化教育产业园|版权所有:北京华信智原教育技术有限公司
在线报名 学费详情 开班信息 职业护航 视频下载

小小华想和您聊一聊