1、缓存穿透
概念:
正常情况下,需要查询的数据都存在,当查询一个缓存和数据库都不存在的数据时,每次请求都会落在数据库里,这种情况成称为缓存穿透。
问题:
缓存穿透一般会导致数据库压力增大。恶意攻击会击垮数据库。会绕过缓存。
解决:
1、在接口增加参数校验,不合法的直接返回。
2、缓存空值,将对应key的value设置为空值,避免暴力攻击。同时将key失效时间设置短一些,避免影响正常使用。
3、在网关阈值,限制同ip访问量。
4、高级用户布隆过滤器。bloom filter,可以对key进行判断是否在数据库存在,不存在就直接返回,存在就查询出来,并刷新缓存。
2、缓存击穿
概念:
高并发系统中,大量请求一般会落在缓存中,但在某一时刻这个热点key过期了,此刻大量请求就会落在数据库。
问题:
会导致数据库压力增大,严重者击垮数据库。
解决:
1、设置热点key不过期。
2、加上分布式锁,每次只有拿到锁的线程可以去访问数据库。第一个线程查询到后就会缓存起来,后面线程从缓存中拿。
3、缓存雪崩
概念:
某一时刻发生大规模缓存不可用问题,比如宕机,过期。
问题:
轻则查询变慢,重则大面积服务不可用。
解决:
1、采用分布式集群,减少宕机风险。
2、将key的失效时间设置为随机数,避免大量缓存同时失效。
3、采用本地缓存加限流逻辑。
来源:oschina
链接:https://my.oschina.net/linqiankun/blog/3191886