Redis学习笔记——缓存穿透、雪崩和击穿

一,缓存穿透

1、描述:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。
如果有大量这种请求,数据库的压力会很大

2、解决方案

1)缓存空对象
把请求的数据设为空值存到缓存中

优点:①实现简单,维护方便
缺点:①额外的内存消耗②可能造成短期的不一致

2)布隆过滤
在客户端与缓存(Redis)中间加一层布隆过滤,在这里判断数据库中是否存在

优点:①内存占用较少,没有多余key
缺点:①实现复杂②存在误判可能

除此之外,还有增强id复杂度,避免被猜出id规律
做好数据的基础格式校验
加强用户权限校验
做好热点参数的限流

二,缓存雪崩

1、指在同一时间段大量缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力

2、解决方案
1)给不同的key的TTL添加随机值
2)利用Redis集群提高服务的可用性
3)给缓存业务添加降级限流策略
4)给业务添加多级缓存

三,缓存击穿

1、也叫热点key问题,就是一个高并发访问并且缓存重建业务比较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击
由于业务比较复杂,当该key失效后重新存入缓存的时间比较长
又因为并发高,这时会有很多请求同时未命中,增加数据库负担

2、解决方案

1)互斥锁:当一个请求未命中时,加锁然后更新缓存,别的请求等待,知道缓存更新完
优点:没有额外的内存消耗
能够保证一致性
实现简单

缺点:线程要等待,性能受影响
可能有死锁的风险

2)逻辑过期:不设置该热点key的TTL,而是加入一个关于过期的字段
当未命中时(逻辑过期),会有单独的一个线程更新缓存,
在没有更新完成时仍然使用旧数据

优点:①线程无需等待,性能较好

缺点:①不保证一致性
②有额外的内存消耗
③实现复杂

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值