缓存穿透
缓存穿透是说的是 缓存和数据库都有没的数据,但是用户不断发起请求,由于缓存未击中,而去查询数据库,但是数据库也没有,这样就失去缓存的意义,当大流量访问的时候,就会导致数据库压力变大,如果有人利用 不存在的key 去查询,这就变成了漏洞
解决方案
当用户访问数据库中不存在的数据时,返回一个空,同时将此数据缓存进我们的redis ,这样下次再来访问的时候,直接访问的是我们一个缓存
缓存击穿
缓存击穿说的是当用户访问的数据,缓存中不存在(一般指数据到期),而去查询数据库(数据库存在),在并发比较高的情况下,就会导致数据库压力过大
解决方案
设置热点数据 用不过期
接口限流,熔断,降级
布隆过滤器
布隆过滤器 是用户用户访问 redis 缓存前进行一个筛选判断
可以设置为白名单模式,布隆过滤器只存放key,不存value,
让符合 key 的请求通过
黑名单则是相反
通常是在项目启动的时候,初始化布隆过滤器里的值
缓存雪崩
缓存雪崩 是指大量数据的在短时间内同时失效,然后,直接访问数据库,从而导致,数据库压力过大,造成缓存雪崩
解决方案
设置过期时间更加随机一点,可以在设置的过期时间上,添加一个随机数
添加队列,使用mq ,慢慢的去读取数据库的数据不至于所有请求直接访问数据库