Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 中间件

    • 定时调度

    • 消息队列

    • 缓存

      • 雪崩、穿透、击穿的理解
        • 缓存雪崩
        • 缓存穿透
        • 缓存击穿
        • 拓展阅读
    • 网络框架

  • 云原生

  • 分布式

  • 存储技术

  • 数据库

  • 服务部署

  • 编程语言

  • 计算技术

  • 服务端
  • 中间件
  • 缓存
gahing
2021-09-21
目录

雪崩、穿透、击穿的理解

# 缓存雪崩

意味着大面积(或全部)缓存失效,直接打到 DB

出现的原因和解决方案:

  • Redis 的 key 同一刻过期失效:存数据时失效时间加个随机值
  • Redis 服务故障:高可用处理,集群化,主从+哨兵

# 缓存穿透

意味着就没想走缓存,直接打到 DB 且数据是不存在的。

一般就是恶意请求带着特殊的 key 保证绕过缓存,不断查询空数据给 DB 造成压力

解决方案:

  • (缓解):业务侧参数校验:增加一些明显的非法 key 的过滤
  • (缓解):ip 限流
  • 布隆过滤器:利用高效的数据结构和算法快速判断 Key 是否在数据库中存在。若判断 key 不存在则一定不存在,此处不做拓展

# 缓存击穿

单点的缓存雪崩

出现原因:热点 key 在某个时刻过期。由于一直在扛着大并发的请求,该热点 key 过期后直接打到数据库

解决方案:

  • 永不过期:缓存不设过期时间,更新数据后直接更新缓存
  • 互斥锁:热点 key 缓存数据过期后,先加锁,去数据库拿数据并写到缓存,再释放锁;其他该热点 key 的请求会等待锁释放,之后直接拿到新缓存。

# 拓展阅读

  • 吊打面试官:Redis 缓存雪崩、击穿、穿透 (opens new window)
编辑 (opens new window)
上次更新: 2024/09/01, 23:56:56
kafka笔记
RPC服务框架

← kafka笔记 RPC服务框架→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式