介绍:
Redis缓存穿透是指当一个非命中的Key(即缓存中不存在的Key)被频繁地查询时,由于缓存中不存在该Key,每次查询都会直接访问后端数据源,从而导致后端数据源压力大增,甚至可能导致服务不可用。这种情况通常发生在缓存中存在大量无效或错误的Key时,这些Key不会和真实数据匹配,因此在查询时会直接访问后端数据源。
攻击者可以利用这一点,短时间内向服务器发送大量不存在数据的查询请求,由于Redis中数据不存在,这些请求都会去数据库中查询,从而造成数据库崩溃.
查询数据流程图:
解决方案:
1、缓存空数据:
每次查询返回的数据如果为空,仍把这个空结果进行缓存,但过期时间会比较短.
2、使用布隆过滤器:
将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一 定不存在的数据会被这个 bitmap 拦截掉,从而避免了对DB的查询.