元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • Redis

    • Redis安装
    • Redis持久化+灾难恢复方案
    • Redis常见数据类型和使用场景
    • Redis数据结构(一)Hyperloglog的实现原理
    • Redis数据结构(二)Bitmap位图的实现原理
    • Redis高可用
    • Redis缓存过期策略以及淘汰策略是什么?
    • 缓存穿透、缓存击穿和缓存雪崩的解决方案
      • 一、缓存雪崩
      • 二、缓存穿透
      • 三、缓存击穿(失效)
      • 四、思维导图
    • Redis分布式锁的演变历史
    • Redis的集成与应用
  • Nginx

  • Kafka

  • Shardingsphere

  • Otter

  • nexus

  • 中间件
  • Redis
元月
2022-06-29
目录

缓存穿透、缓存击穿和缓存雪崩的解决方案

# 缓存穿透、缓存击穿和缓存雪崩的解决方案

# 一、缓存雪崩

​ 1、什么是缓存雪崩?

​ 大量的热点 key 设置了相同的过期时间,导在缓存在同一时刻全部失效,造成瞬时数据库请求量大、压力骤增,引起雪崩,甚至导致数据库被打挂。

​ 2、解决方案?

  • ​ 过期时间打散
  • ​ 热点数据不过期

# 二、缓存穿透

​ 1、什么是缓存穿透?

​ 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中

​ 2、解决方案?

  • ​ 缓存空对象

    如果缓存和数据库都查不到某个 key 的数据就写一个到 Redis 中去并设置过期时间,具体命令如下: SET key value EX 10000,为了防止大量无效key,失效时间尽量设置的短一点

  • ​ 布隆过滤器

    对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不存在的数据布隆过滤器一般都能够过滤掉,不让请求再往后端发送。当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。

# 三、缓存击穿(失效)

​ 1、什么是缓存击穿?

​ 某一个热点 key,在缓存过期的一瞬间,同时有大量的请求打进来,由于此时缓存过期了,所以请求最终都会走到数据库,造成瞬时数据库请求量大、压力骤增,甚至可能打垮数据库

​ 2、解决方案?

  • ​ 加锁

    ​ CAS,互斥锁

  • ​ 热点数据不过期

    ​ 直接将缓存设置为不过期,然后由定时任务去异步加载数据,更新缓存

# 四、思维导图

img_2.png

#Redis
Redis缓存过期策略以及淘汰策略是什么?
Redis分布式锁的演变历史

← Redis缓存过期策略以及淘汰策略是什么? Redis分布式锁的演变历史→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式