Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

一、缓存雪崩

发生场景:当Redis服务器重启或者大量缓存在同一时期失效时,此时大量的流量会所有冲击到数据库上面,数据库有可能会由于承受不住而宕机

  解决办法:

    1)随机均匀设置失效时间

    2)设置过时标志更新缓存

    3)并发量不是特别多的时候,使用最多的解决方案是加锁排队

二、缓存穿透

  发生场景:是指查询一个数据库必定不存在的数据。正常的使用缓存流程大体是,数据查询先进行缓存查询,若是key不存在或者key已通过期,再对数据库进行查询,并把查询到的对象,放进缓存。若是数据库查询对象为空,则不放进缓存。此时,若攻击者抓住这个漏洞不断请求数据库,就会对数据库形成压力,甚至压垮数据库。

  解决办法:采用缓存空值的方式,也就是从数据库查询的对象为空,也放入缓存,只是设定的缓存过时时间较短,好比设置为60秒。

三、缓存预热

是一种机制, 就是系统上线后,提早将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,而后再将数据缓存的问题。

四、缓存更新

 是一种机制,怎么样保证缓存中的key是实时有效的,以及及时的更新数据资源

  解决办法:

    1)缓存服务器自带的缓存失效策略

    2)自定义:定时去清理过时的缓存;当用户请求过来时,再判断这个请求所用到的缓存是否过时,过时的话就去底层系统获得新数据并更新缓存。

五、缓存降级

发生场景:当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然须要保证服务仍是可用的,即便是有损服务。系统能够根据一些关键数据进行自动降级,也能够配置开关实现人工降级。降级的最终目的是保证核心服务可用,即便是有损的。并且有些服务是没法降级的(如加入购物车、结算)。

  解决办法:

    在进行降级以前要对系统进行梳理,看看系统是否是能够丢卒保帅;从而梳理出哪些必须誓死保护,哪些可降级;好比能够参考日志级别设置预案:

    (1)通常:好比有些服务偶尔由于网络抖动或者服务正在上线而超时,能够自动降级;

    (2)警告:有些服务在一段时间内成功率有波动(如在95~100%之间),能够自动降级或人工降级,并发送告警;

    (3)错误:好比可用率低于90%,或者数据库链接池被打爆了,或者访问量忽然猛增到系统能承受的最大阀值,此时能够根据状况自动降级或者人工降级;

    (4)严重错误:好比由于特殊缘由数据错误了,此时须要紧急人工降级。
相关文章
相关标签/搜索