Redis实战场景---缓存穿透

懒驴 2022年01月14日 22次浏览

文章《Redis的配置类以及Redis的操作工具类》描述了SpringBoot集成Redis已经Redis的一般操作类,现在将来看看Redis在项目中的运用场景---缓存穿透。

Redis缓存的使用极大地提升了应用程序的整体性能和效率,特别是在查询数据方面,大大减低了查询数据库的频率,但同时也带来了一些问题,其中比较典型的问题包括缓存穿透、缓存血崩和缓存击穿。此次将对“缓存穿透”做详细讲解。

1. 什么是缓存穿透

首先我们来看看项目中使用缓存Redis查询数据的正常流程,如下图:

Redis缓存正常查询的大致流程图


从上图中可以看出,前端用户要访问获取数据时,后端首先会在Redis中查询,如果查询到数据,则直接将数据返回给用户,流程结束;如果在缓存中没有查询到数据,则前往数据库中查询,此时如果能查询到数据,则将数据返回给用户,同时将数据加入到Redis缓存中,流程结束,如果在数据库中没有查询到数据时,则返回null,流程结束。 这个正常查询缓存的流程刚开始看似乎没什么问题,但是仔细看最后一个步骤:“当查询数据库时如果没有查询到数据,则直接返回null给前端,流程结束”,如果前端频繁发起访问请求时,恶意提供数据库中不存在的Key,则此时数据库中查询到的数据将永远为Null。由于Null数据是不存入缓存中的,因而每次访问请求时将查询数据库,如果此时恶意攻击,发起“洪流”式的查询,则很有可能会对数据库造成极大的压力,甚至压垮数据库。这个过程称之为“ 缓存穿透 ”,顾名思义,就像是“永远越过了缓存而直接永远的访问数据库”。

[持续更新中...]