缓存穿透是指查询一个不存在的数据,由于缓存未命中时需要从数据库查询,同时查不到数据时也不会写入缓存,这就会导致每次请求这个不存在的数据时都要到数据库去查询,在流量大时,如果有人利用这个漏洞频繁访问我们的应用,可能会导致数据库的崩溃。
解决方案如下:
1、采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层数据库的查询压力。
2、如果从数据库中查询不到相关数据(即使查询出错),仍然把空结果进行缓存,同时把过期时间设置得短一些,最好不超过五分钟。