缓存之穿透,击穿,雪崩

十年热恋 提交于 2020-03-11 17:37:40

1、缓存穿透

概念:

正常情况下,需要查询的数据都存在,当查询一个缓存和数据库都不存在的数据时,每次请求都会落在数据库里,这种情况成称为缓存穿透。

问题:

缓存穿透一般会导致数据库压力增大。恶意攻击会击垮数据库。会绕过缓存。

解决:

1、在接口增加参数校验,不合法的直接返回。

2、缓存空值,将对应key的value设置为空值,避免暴力攻击。同时将key失效时间设置短一些,避免影响正常使用。

3、在网关阈值,限制同ip访问量。

4、高级用户布隆过滤器。bloom filter,可以对key进行判断是否在数据库存在,不存在就直接返回,存在就查询出来,并刷新缓存。

2、缓存击穿

概念:

高并发系统中,大量请求一般会落在缓存中,但在某一时刻这个热点key过期了,此刻大量请求就会落在数据库。

问题:

会导致数据库压力增大,严重者击垮数据库。

解决:

1、设置热点key不过期。

2、加上分布式锁,每次只有拿到锁的线程可以去访问数据库。第一个线程查询到后就会缓存起来,后面线程从缓存中拿。

3、缓存雪崩

概念:

某一时刻发生大规模缓存不可用问题,比如宕机,过期。

问题:

轻则查询变慢,重则大面积服务不可用。

解决:

1、采用分布式集群,减少宕机风险。

2、将key的失效时间设置为随机数,避免大量缓存同时失效。

3、采用本地缓存加限流逻辑。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!