缓存穿透缓存击穿与雪崩

缓存穿透 (查不到导致)

  • 用户查询一个数据,缓存中没有就会去持久层数据库中查询,高并发情况下(秒杀),缓存中没有命中,于是都去请求持久层数据库,给持久层数据库造成很大的压力,这个时候就相当于出现了缓存穿透。
解决方案
  1. 布隆过滤器
    布隆过滤器是一种数据结构,把所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力
    在这里插入图片描述
  2. 缓存空对象
    当持久层数据库不命中时后(数据库中没有),返回一个空对象,并把空对象存储在缓存层中, 下次有用户访问时,则会返回给其一个空对象

存在的问题:
空值被缓存起来,会导致缓存中存放着多个空值的键
无法保证一致性(存在持久层数据库中更新了数据,但缓存层中仍有缓存)

缓存击穿 (量太大,缓存过期瞬间并发大)

  • 指一个key非常的热,不停的抗高并发,当key失效的瞬间大量的并发数据直接请求数据库
  • 一般是热点数据
解决方法
  1. 设置热点数据永不过期 缓存数据会满,不是好的解决方案
  2. 加分布式互斥锁 类似于阻塞队列 当缓存失效,加锁,对于一个key 可保证只有一个线程进去访问持久层,其余的进行等待

缓存雪崩

  • 在某一个时刻,缓存集体失效。或者redis宕机
  • 缓存集体失效,所有请求全打在持久化数据库上
解决方案
  1. redis高可用 多增设几台redis ,搭建集群
  2. 限流降级 1. 加分布式互斥锁 2. 停掉一些服务,保证主要服务的可用 (比如双11的时候不允许退货)
  3. 数据预热 在正式部署之前,先把可能的数据预先访问一遍,将大量数据加载到缓存中去,并设置不同的过期时间,让缓存失效的时间均匀点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值