zoukankan      html  css  js  c++  java
  • 关于redis的几件小事(七)redis缓存雪崩与穿透

    1.缓存雪崩

    (1)什么是缓存雪崩

    缓存雪崩指的是在同一时刻,缓存大量失效,导致大量的请求直接到了数据库,数据库压力剧增,引起系统崩溃。可能出现的情况有:
    ①大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。
    ②缓存系统出现故障,造成缓存系统无法提供服务,造成瞬时DB请求量大、压力骤增,引起雪崩。

    (2)怎么避免缓存雪崩

    事前
    ①在设置key的过期时间时,在过期时间上加上一个随机值,防止大量key同时过期。
    ②搭建高可用的缓存架构,比如使用 哨兵+主从 结构或者使用 cluster模式,避免缓存系统出现故障。
    ③可以在系统中使用ehcache做个小缓存,防止redis崩掉之后,还有一部分缓存。
    事中
    ①对系统请求进行降级和限流,防止数据库之间崩掉。
    事后
    赶快使用redis持久化的数据,快速恢复缓存数据

    2.缓存穿透

    (1)什么是缓存穿透

    缓存穿透是指有请求访问到了并不存在的数据,这样请求就会直接到达数据库,数据库就会压力剧增。

    (2)怎么避免缓存穿透

    ①可以使用一个足够大的bitmap,将可能存在的key放到里面,请求过来先检查bitmap里面有么有,如果没有直接过滤掉这个请求。
    ②将数据库查询出来的空值也放到缓存里面去,是这个key对应一个空值,只是这个key设置的时间比较短。

    3.缓存击穿

    (1)什么是缓存击穿

    一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到数据库,造成数据库请压力骤增。

    (2)怎么避免缓存击穿

    在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。

  • 相关阅读:
    压缩与解压缩
    权限和特殊权限
    用户和组
    bash基础特性
    vim编辑器
    目录及文件操作命令
    ye
    软件包的安装与管理
    磁盘管理
    归档与展开归档
  • 原文地址:https://www.cnblogs.com/jack1995/p/10915122.html
Copyright © 2011-2022 走看看