每天一个知识点- redis 缓存雪崩、缓存穿透、缓存击穿

本文介绍了Redis缓存中可能遇到的三种问题:雪崩、穿透和击穿,以及相应的解决方案。缓存雪崩可能导致数据库宕机,解决方案包括数据持久化和缓存预热。缓存穿透是指大量请求不存在的key,解决办法是在数据库未找到数据时存入空值并设置过期时间。缓存击穿针对高频访问的key失效情况,可通过设置永不过期或使用互斥锁避免。
摘要由CSDN通过智能技术生成

在这里插入图片描述

每日一题

在这里插入图片描述

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

Redis 是一个内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。用redis作为告诉缓存时可能出现缓存雪崩、缓存穿透、缓存击穿这三种情况,以下对这三种情况以个人理解做一下总结,欢迎大佬指教

缓存雪崩

缓存雪崩,顾名思义缓存全部失效了,缓存雪崩大多发生在者两种情况下

  1. redis 或 服务 刚刚启动redis中还没有缓存(缓存冷启动),如果这时 有大量请求打在数据库服务上,就会造成数据的宕机
    这种情况下 一般有两种解决方案
    • 数据持久化:数据通过 RDB或者AOF 的方式持久化,在redis启动从硬盘中加载数据到内存
    • 缓存预热: 缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!
  2. 业务量剧增,导致redis宕机了,请求全部打在数据库上,导致数据库宕机,同时重新启动数据库请求没降下来也会继续宕机
    解决方案
    • 事前:redis 服务高可用配置
    • 事中:使用限流,并且降级方式防止数据库被打死 牺牲部分用户的可用性,保证系统存活
    • 事后:redis持久化

缓存穿透

大量请求一直访问不存在的 key 导致请求全部搭载数据库上
比如:黑客恶意攻击,查询id 等于 -1 的数据,大量请求打到数据库上造成数据库当局不可用
解决方案

  • 当数据库中查不到数据,写一个空值到redis,并设置过期时间,下次有相同的key访问redis,在缓存失效前都可以在缓存中取数据

缓存击穿

某个key访问非常频繁,在这个key在失效的瞬间大量请求就击穿了缓存,直接请求到数据库
解决方案

  • 若缓存的数据基本不会变更,可以设置key永不过期
  • 若缓存的数据更新不频繁 ,可以通过互斥锁机制,(使用 redis 或者 zookeeper 等分布式锁中间价)在缓存失效时以保证少量请求请求到数据库
  • 若缓存的数据更新频繁或者缓存刷新流程比较慢的情况下,可以使用定时任务,在缓存过期前构建缓存,或者延长过期时间
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1999

每人一点点,明天会更好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值