redis缓存雪崩、缓存穿透、缓存并发、缓存预热、缓存降级讲解

缓存雪崩

  1. 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查询数据库
    导致数据库CPU和内存负载过高,甚至数据库服务器挂掉

如何预防缓存雪崩

  1. 缓存的高可用性
  2. 缓存降级: 缓存降级指的是缓存失效或者缓存服务器挂掉的情况下,不去访问数据库,直接返回默认数据或者服务的内存数据
    降级一般是有损的操作,所以尽量减少降级对业务的影响程度
  3. redis备份和快速预热
  4. 提前演练

缓存穿透

  1. 缓存穿透是指查询一个不存在的数据,例如从缓存redis没有命中,需要从mysql数据库查,查不到数据则不写入缓存
    这将导致这个不存在的数据每次请求都会去从数据库查,造成缓存穿透

如何解决缓存穿透

  1. 缓存redis没有命中,如果查询数据库也为空,直接设置一个默认值存放到缓存,
    这样第二次到缓存中获取就有值了,而不会继续访问数据库,
    设置一个过期时间或者当有值的时候将缓存中的值替换掉即可

缓存并发

  1. 这里的并发指的是多个redis client同时set key引起的并发问题,redis本身其实是单线程的
    多个client并发操作,按照先到先执行的原则,先到的先执行,其余的堵塞。
    另外的解决方案是把redis.set操作放到队列中使其串行化,必须得一个一个执行

缓存预热

  1. 缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统
    这样就可以避免用户在请求的时候,先查询数据库,在写到缓存系统,用户可以直接查询事先被预热的缓存数据

缓存预热解决思路

  1. 直接写个缓存刷新页面,上线时手工操作
  2. 数据量不大,可以在项目启动的时候自动进行加载

缓存降级

  1. 当缓存系统挂掉后,会有大量的请求访问数据库,我们可以使用缓存降级不去访问数据库,直接返回默认值或者服务内的缓存数据,
    缓存降级对应用是有损的,对业务应用系统中不核心的缓存数据才能使用缓存降级

以上就是缓存雪崩、缓存穿透、缓存并发、缓存预热、缓存降级的大致讲解。

参考文档

posted @ 2022-03-31 09:44  专职  阅读(147)  评论(0编辑  收藏  举报