顾名思义,本身redis的存在就是像屏障一样,挡在数据库前面,为数据库分担压力,如果流量还是穿过了reids,那么就相当于redis这个屏障失效了,所以叫做缓存穿透

如图所示就是一个缓存穿透的典型例子,我们首先获取缓存中的数据,如果没有,就查询数据库,然后不为空就保存数据到redis;
这样就造成了一个问题,如果一个key在缓存中没有数据,数据库中也没有数据,一直访问这个接口,就会不断的去直接访问数据库,redis这个屏障也就被穿透了;
怎么处理呢?

如图,即使数据库中查询的数据为空,也要放到缓存里面,这样缓存里就是一个空的数组,如果下回调用接口,缓存就不为空了,也就不会直接访问到数据库,redis缓存就无法被穿透,还是会保护好数据库。
网友评论