Skip to content

缓存穿透

缓存穿透是说的是 缓存和数据库都有没的数据,但是用户不断发起请求,由于缓存未击中,而去查询数据库,但是数据库也没有,这样就失去缓存的意义,当大流量访问的时候,就会导致数据库压力变大,如果有人利用 不存在的key 去查询,这就变成了漏洞

解决方案

当用户访问数据库中不存在的数据时,返回一个空,同时将此数据缓存进我们的redis ,这样下次再来访问的时候,直接访问的是我们一个缓存

缓存击穿

缓存击穿说的是当用户访问的数据,缓存中不存在(一般指数据到期),而去查询数据库(数据库存在),在并发比较高的情况下,就会导致数据库压力过大

解决方案

  1. 设置热点数据 用不过期

  2. 接口限流,熔断,降级

  3. 布隆过滤器

    布隆过滤器 是用户用户访问 redis 缓存前进行一个筛选判断

    可以设置为白名单模式,布隆过滤器只存放key,不存value,

    让符合 key 的请求通过

    黑名单则是相反

    通常是在项目启动的时候,初始化布隆过滤器里的值

缓存雪崩

缓存雪崩 是指大量数据的在短时间内同时失效,然后,直接访问数据库,从而导致,数据库压力过大,造成缓存雪崩

解决方案

  1. 设置过期时间更加随机一点,可以在设置的过期时间上,添加一个随机数

  2. 添加队列,使用mq ,慢慢的去读取数据库的数据不至于所有请求直接访问数据库