缓存预热、缓存雪崩、缓存穿透、缓存击穿

缓存预热

问题现象:服务器启动后迅速宕机

问题分析:大量的数据请求缓存没有命中,从数据库查询数据然后存在缓存中,短时间内对redis高强度操作导致

问题解决:1.使用脚本程序固定数据预热过程

                  2.如果条件允许,使用了CDN(内容发布网络),效果会更好

总结:缓存预热就是在系统启动之前,提前将相关的缓存数据直接加载到缓存系统,避免大量用户用户在请求时,一并访问数据库,然后再存在缓存中。

缓存雪崩

问题现象:数据库服务器崩溃,导致整个系统接连崩溃

问题分析:短时间内,redis中大量key同时过期。导致短时间内大量请求直接访问数据库,导致数据库崩溃

问题解决:1.业务数据有效期进行分类错峰:A类100分钟,B类50分钟,C类200分钟

                  2.超热数据使用永久key

                  3.定期维护(自动和人工配合)

                  4.加锁:慎用!

总结:缓存雪崩就是redis中的缓存在短时间过期大量的key,导致数据库访问量激增不堪重负崩溃,通过调整数据有效期的策略,并监控服务器的运行数据,可以有效解决缓存雪崩现象。

缓存击穿

问题现象:同样是数据库崩溃,但是和缓存雪崩不一样,数据库崩溃后,Redis内存正常运行

问题分析:redis缓存中一个热点key过期了,该key的访问量巨大,有关该key的请求同时进入redis均未命中,redis短时间内发起了对数据库大量数据访问

问题解决:1.创建多级缓存。例如第一层缓存negix缓存,第二层redis缓存,第三层redis缓存

                  2.监控访问量,对数据访问量激增的数据key设置为永久

                  3.加锁:分布式锁,防止被击穿,注意性能瓶颈。慎用!

总结:缓存击穿时单个热点key过期,导致短时间大量请求访问数据库。导致数据库崩溃。应对策略从业务方面和预防方面进行,配合运行监控测试与及时调整策略。单个key的过期监控难度较高,配合雪崩处理方案更好

缓存穿透

问题现象:数据库叒崩溃了,崩溃过程中发现redis中大面积出现未命中,且出现非正常URL访问

问题分析:大量请求恶意访问一个不存在key,该请求的key在数据库都不存在,在reids自然也无法命中,极有可能时黑客的恶意访问攻击

问题解决:1.缓存null:对查询结果为null的数据进行缓存(长期使用,定期清理)

                  2.白名单策略:提前预热各种分类数据id对应的bitmaps,id作为bitmaps的offset,相当设置了白名单。

                  3.实施监控

                  4.key加密:临时启动防灾业务key,对key进行业务层传输加密服务,设定校验程序,过来的key校验

总结:缓存击穿是指大量请求访问不存在的key,导致数据库压力激增。无论是黑名单还是白名单都是对整体系统的压力,警报解除后要尽快解除

你可能感兴趣的:(redis,缓存)