LiSheng's blog LiSheng's blog
首页
笔记
个人简历
随笔集
GitHub (opens new window)
首页
笔记
个人简历
随笔集
GitHub (opens new window)
  • golang

  • cplus

  • leetcode

  • 存储技术

  • 分布式系统

  • 计算机网络

  • Linux操作系统

  • Redis

    • 大纲
    • redis持久化策略
    • redis事务
    • redis分布式锁
    • redis高可用
    • redis主从同步
    • Redis是什么
    • Redis基本数据结构
    • Redis为什么这么快
    • 缓存击穿、缓存穿透、缓存雪崩
      • 热Key问题,如何解决热key问题
      • Redis 过期策略和内存淘汰策略
      • Redis 的持久化机制
      • Redis的高可用
      • 使用过Redis分布式锁
      • Redis的跳跃表
      • MySQL与Redis 如何保证双写一致性
      • Redis的Hash 冲突怎么办
      • 布隆过滤器
      • Redis 事务机制
    • 其他

    • 笔记
    • Redis
    lisheng
    2024-09-10
    目录

    缓存击穿、缓存穿透、缓存雪崩

    在使用 Redis 进行缓存时,会遇到一些常见的缓存问题,如缓存击穿、缓存穿透和缓存雪崩。这些问题如果处理不好,会导致系统性能下降甚至崩溃。以下是对这些概念的解释:

    # 1. 缓存击穿(Cache Breakdown)

    定义: 缓存击穿是指某个热点数据在缓存中过期失效,而此时有大量并发请求同时查询该数据,由于缓存失效,请求直接打到数据库,造成数据库瞬间压力剧增,甚至可能导致数据库崩溃。

    场景: 某个热点键(Key)正好在高并发的场景下过期,这时大量请求都无法从缓存中获取数据,只能访问数据库。

    解决方案:

    • 缓存预热: 在数据即将过期前主动刷新缓存,确保热点数据不会同时失效。
    • 使用互斥锁: 当缓存失效时,只有一个请求去加载数据并更新缓存,其余请求等待锁释放,之后从缓存中读取数据。
    • 永不过期: 对于特别重要的热点数据,可以设置为永不过期,定期更新缓存数据。

    # 2. 缓存穿透(Cache Penetration)

    定义: 缓存穿透是指查询的数据既不在缓存中,也不在数据库中。通常是因为用户输入了非法的 ID 或者恶意攻击者频繁访问不存在的数据,导致每次请求都会直接穿透缓存访问数据库,严重时会导致数据库崩溃。

    场景: 攻击者通过大量的非法请求不断尝试查询不存在的数据,绕过缓存直接攻击数据库。

    解决方案:

    • 缓存空值: 对查询结果为空的数据,也进行缓存,并设置一个较短的过期时间,防止重复访问同一不存在的数据。
    • 布隆过滤器(Bloom Filter): 在缓存层增加一个布隆过滤器,用于快速判断某个请求是否会命中数据库,如果布隆过滤器判定数据不存在,则直接返回,避免请求落到数据库。
    • 参数校验: 在应用层对传入的请求参数进行严格校验,防止不合法的参数直接进入缓存和数据库。

    # 3. 缓存雪崩(Cache Avalanche)

    定义: 缓存雪崩是指在某一个时间段,缓存中的大量数据同时过期或Redis服务宕机,导致大量请求直接打到数据库,造成数据库瞬间负载过高甚至崩溃。

    场景: 某个时间点,大量缓存数据同时失效,或者缓存服务不可用,导致所有请求都绕过缓存直接访问数据库。

    解决方案:

    • 缓存数据过期时间分散: 在设置缓存过期时间时,增加一个随机值,防止大量缓存数据在同一时间失效。
    • 双缓存策略: 使用双缓存,数据失效时先查询旧缓存,再去更新新的缓存。
    • 降级策略: 当缓存服务不可用时,启用服务降级策略,限制对数据库的访问,保护数据库。
    • 多级缓存: 使用多级缓存策略(如本地缓存+分布式缓存),在分布式缓存不可用时,从本地缓存读取数据,减少对数据库的压力。

    通过合理的设计和防护措施,能够有效地避免这些缓存问题,确保系统的高可用性和稳定性。

    编辑 (opens new window)
    上次更新: 2024/09/13, 11:59:12
    Redis为什么这么快
    热Key问题,如何解决热key问题

    ← Redis为什么这么快 热Key问题,如何解决热key问题→

    最近更新
    01
    ceph分布式存储-对象存储(RGW)搭建
    10-27
    02
    ceph分布式存储-集群客户端连接
    10-27
    03
    ceph分布式存储-管理crushmap
    10-27
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式