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

缓存击穿(面试常问)

某个热点key在缓存和数据库都存在,过期时,大量用户访问这个key,读缓存读取不到就会同时去数据库读,压垮数据库.

怎么解决:

  1. 将热点数据设置不过期,但是需要自己判断哪些数据是热点数据

  2. 加锁,多个访问时,只有一个客户端能获得锁,其他会被阻塞,等锁释放了,缓存中已有数据,其他客户端就不用访问数据库,但是这个方法会影响吞吐量(有损方案)

缓存雪崩(面试常问)

情况一.给大量的key设置了相同的过期时间(数据在缓存和数据库都存在),到了过期时间

,key集体失效,访问就会全部进入数据库(不能使用缓存击穿的加锁来解决)

解决方法:

  1. 错开过期时间,在过期时间加随机值

  2. 服务降级,暂停非核心数据数据查询缓存,返回一个错误页面或者空值(有损方案)

情况二.redis宕机,大量请求进入数据库

解决方法:

  1. 事前预防:搭建高可用集群.(提倡使用 )

  2. 多级缓存.缺点是实现复杂度高

  3. 熔断,通过监控一旦雪崩出现,暂停缓存访问,待实例恢复,返回预定义信息(有损方案)

  4. 限流,通过监控一旦发现数据库访问量超过阈值,限制访问数据库的请求数(有损方案)

缓存穿透(面试常问)

key在数据库和缓存都不存在,访问这个key每次都会进入数据库

  1. 会被恶意请求利用进行攻击数据库

  2. 缓存雪崩和缓存击穿可以自然恢复,缓存穿透不能.

解决方法:

1.数据库没有这个key就把他关联一个null值放入缓存,缺点是这样的key没任何意义,浪费空间.

2.布隆过滤器

  1. 过滤器判定key是否存在不存在过滤掉

  2. 需要提前将所有key预加载进过滤器

  3. 布隆过滤器不能删除,所有查询已经删除的数据会发生穿透(布谷鸟过滤器可以解决这个问题)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值