zoukankan      html  css  js  c++  java
  • Redis_缓存穿透和雪崩

    Redis缓存穿透和雪崩

    1. 布隆过滤器

    布隆过滤器是一种数据结构, 对所有可能查询的参数以hash形式存储, 在控制层先进行校验, 不符合则丢弃, 从而避免了对底层存储系统的查询压力

    2. 缓存空对象

    • 当存储层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源

    • 存在的问题

      • 如果空值能够被缓存起来,这就意味着缓存需要更多的空间存储更多的键,因为这当中可能会有很多的空值的键
      • 即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一 致,这对于需要保持一致性的业务会有影响

    3. 缓存穿透和缓存击穿

    • 区别

      • 缓存穿透是由于缓存中没有命中, 大量请求都去请求了持久层的数据库, 对数据库造成了极大的压力 ====> 缓存中查不到
      • 缓存击穿是指一个 key 非常热点, 大量并发对其进行访问, 在整个key失效的瞬间, 持续的大并发就穿破缓存, 直接请求数据库, 使得数据库压力瞬间变大 ====> 量太大了
    • 解决方案

      • 缓存穿透
        • 布隆过滤器
        • 缓存空对象
      • 缓存击穿
        • 设置热点数据永不过期
        • 加互斥锁 ==> 每个key同一时间只有一个线程去查询后端服务, 其余的线程等待

    4. 缓存雪崩

    在某个时间段, 缓存集中过期失效, Redis宕机

    解决方案

    • Redis高可用 ====> 异地多活
    • 限流降级
    • 数据预热 ====> 数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中
  • 相关阅读:
    正则表达式简介
    每个程序员都必须遵守的编程原则
    String, StringBuffer, StringBuilder
    一些软件设计的原则
    A hard puzzle ACM HDU1097
    ACM HDU 1032The 3n + 1 problem
    Humble Numbers HDU 1058 ACM
    ACM HDU 1028Ignatius and the Princess III
    HangOver ACM HDU1056
    ACM HDU 1021Fibonacci Again
  • 原文地址:https://www.cnblogs.com/wang-sky/p/13877594.html
Copyright © 2011-2022 走看看