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。

  • 相关阅读:
    python3 get/post/使用代理/自定义header/自定义Cookie
    网页定位点击事件js响应函数教程(Chrome)
    burpsuite只拦截特定网站数据包教程
    AWVS和AppScan使用代理进行扫描教程
    kdbg安装使用教程(kali)
    kali-rolling安装nessus 7并创建扫描任务教程
    WebGoat 8安装、配置、使用教程(CentOS)
    应用层协议与传输层、网络层、数据链路层在编码上的区别
    Oracle Linux下载教程(以Oracle Linux 6.9为例)
    su和su -的区别
  • 原文地址:https://www.cnblogs.com/jack1995/p/10915122.html
Copyright © 2011-2022 走看看