Marvel-Site Marvel-Site
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

Marvel

吾必当乘此羽葆盖车
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • Java

  • 计算机基础

  • 框架|中间件

    • Spring

    • MyBatis

    • MySQL

    • Redis

      • Redis简介
      • Redis常用命令
      • Redis底层数据结构
      • Redis数据结构
      • Redis多线程单线程问题
      • Redis过期删除策略和缓存淘汰机制
      • Redis持久化
      • Redis分布式锁
      • Redis事务
      • Redis缓存穿透、缓存击穿、缓存雪崩
        • 缓存穿透(Cache Penetration)
        • 缓存击穿(Hotspot invalid)
        • 缓存雪崩(Cache Avalanche)
      • Redis集群 - 哨兵模式
      • Redis集群 - Redis集群
    • 消息队列

    • Zookeeper

    • Git

    • Maven

    • Gradle

  • 架构

  • 后端
  • 框架|中间件
  • Redis
Marvel
2022-07-21
目录

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

# 缓存

# 缓存穿透(Cache Penetration)

描述:指缓存和数据库种都没有的数据,而用户不断发起请求。

举例:黑客用一个不存在的用户 id 获取用户信息,不论缓存还是数据库都没有,大量请求直接把数据库打死。

解决:

  • 对空值缓存,如 set -999 UNKOWN 然后设置一个过期时间
  • 设置布隆过滤器,将数据库种所有可能的数据哈希映射在布隆过滤器上,若请求数据的 key 不存在于布隆过滤器上,那数据一定不存在与数据库种,直接返回不存在
  • 设置白名单、黑名单

image-20220721211510307

# 缓存击穿(Hotspot invalid)

描述:某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求在缓存种获取不到数据就直接请求数据库,导致数据库宕机

解决:

  • 缓存数据基本不发生更新,设置热点数据不过期
  • 缓存数据更新不频繁,且缓存刷新的流程耗时较少,使用分布式锁保证仅有少量的请求能请求到数据库并重构缓存
  • 缓存数据更品频繁或缓存刷新耗时较长,定时线程主动刷新化成或者延时过期

image-20220721212329737

# 缓存雪崩(Cache Avalanche)

描述:指缓存中数据大批量到期,而查询数据量巨大,引起数据库压力过大甚至宕机。

这里 (opens new window)看到另一种说法,缓存因意外全部宕机,所有请求全部落到数据库,把数据库打死。不知道哪一种说法是对的。

区别:和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到而查数据库。

解决:

  • 设置热点数据不过期
  • 过期时间随机,防止同一时间大量过期
  • 分布式部署时将不同数据分布在不同缓存数据中
编辑 (opens new window)
#Redis
上次更新: 2023/08/20, 21:21:52
Redis事务
Redis集群 - 哨兵模式

← Redis事务 Redis集群 - 哨兵模式→

最近更新
01
位运算
05-21
02
二叉树
05-12
03
Spring三级缓存解决循环依赖
03-25
更多文章>
Theme by Vdoing | Copyright © 2022-2024 Marvel
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式