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

1、redis缓存预热:缓存预热就是说刚重启服务后,数据库崩溃。

       原因:服务器重新启动后缓存中是空的,用户请求数据多次未命中,只能从数据库进行查询,导致数据库压力过大,响应不及时,请求超时,导致数据库崩溃,重启等都没有效果。

      处理方案:提前将一些高热的数据添加到redis中,保证数据库服务压力适当减少等。。。。。。

2、redis缓存雪崩,缓存雪崩说的就是同一时间内大量的key过期,导致请求访问redis的时候未命中,请求又从数据库跑过去了,数据库压力大,崩了,应用服务器崩了,redis崩了,都崩了。

      原因:同时间大量的key过期导致

      处理方案:这个处理得从多方面去优化,redis中对高热数据进行延时的处理,数据库对一些慢查询,极可能出现超时的SQL进行优化处理,通过Nginx,等进行缓存多级处理,redis中没有了,请求先去看别的缓存中有没有数据,没有的话在去访问数据库,能过滤下。

3、缓存击穿、缓存击穿讲的是某一个key突然过期了,大量的请求过来未命中,都跑到数据库去,数据库崩了。

      原因:单个key过期了,例如某个女明星劈腿某个男明星,男明星在网络上爆料了一些有料照片。突然就火起来了。然后大家都点进去看,一下子诸多请求访问redis,结果redis这个key还过期了,一下数据库就崩了。

      处理方案:和雪崩差不多,但是只有单个key,处理方案也很多可以复用。

4、缓存穿透、这个一般是黑客攻击,特点是请求url不合法,大量key未命中。

      原因:大量的key未命中,key本身就不存在,数据库也不存在。

      处理:先报警,然后根据他的请求在Redis中存一下数据,时效为30-60s,一般不能超过5分钟,加白名单或者黑名单等。。

5.redis应用于限时按次计数,例如:某公司api接口每分钟只允许普通用户调用十次,超过十次则不允许调用提示升级会员。         

setex userID 60 max-次数
incr userID
当这个value值加到max时,就会报错,程序检测到这个错误就让用户升级会员。

6.redis应用于基于时间顺序的数据操作,不关注具体时间。例如微信聊天消息接收,A用户接收,BCD用于发送

发送消息顺序,BDCDC
lrem A 1 B
lpush A B
lrem A 1 D
lpush A D
lrem A 1 C
lpush A C
lrem A 1 D
lpush A D
lrem A 1 C
lpush A C
最后的顺序应该是CDB<从上到下>