缓存雪崩-击穿-穿透

本文详细介绍了缓存雪崩、缓存击穿和缓存穿透的概念及其对系统的影响。针对这些问题,提出了预防策略,如设置缓存时间的随机性、采用缓存集群、设置热点数据永不过期以及使用熔断机制。同时,讨论了布隆过滤器在防止缓存穿透中的应用,通过哈希函数标记数据并避免无效请求对数据库造成压力。
摘要由CSDN通过智能技术生成

缓存雪崩

雪崩的时候没有一片雪花是无辜的->

1)缓存雪崩是在某一瞬间,缓存数据设置的过期时间大致相同,导致大量的缓存失效,这时候大量请求进来,导致数据库压力太大(很多文章拿秒杀作为例子),导致其他正常的业务处理,造成了缓存雪崩;

2)缓存服务器宕机,导致缓存用不了

在实际开发过程中,预防雪崩:

1)设置缓存时间的随机性,让缓存数据不会在某个时间点集中失效

2)拿redis缓存来说,做redis集群处理

3)设置热点数据永不过期

4)当雪崩产生,针对非核心请求,可以做熔断来处理(在微服务开发中使用的Hystrix)。针对核心请求,允许访问数据库;

缓存击穿

击穿就个人理解,应该算是雪崩的一种情况;

1)在某一刻某个热点数据失效,大量请求进来,缓存取不到直接在数据库进行取值,导致数据库压力太大

实际开发中,对于热点数据,一般都设置永不过期,不允许删除热点数据的缓存,只允许更新

缓存穿透

穿透来说,就是数据既不存在于缓存又不存在于数据库,特别针对恶意攻击,不断请求缓存和数据库不存在的数据库,每次都去数据库查询(一般对于缓存不存在,但是数据库查询到的,会写入缓存,方便下一次请求可以走缓存),导致数据库压力暴增

1)养成良好的编码习惯,在接口入参增加valid注解校验入参

2)恶意攻击者过来的数据进行缓存空置和缺省值(该方案是大多数博客都会提到的一个方案,在实际开发中使用的缓存处理,好像并没有这么做)

3)使用布隆过滤器,本质上是布隆过滤器会标记写入到数据库的数据

布隆过滤器实现逻辑:

1)对想要标记的数据,使用哈希函数计算出哈希值

2)对得到的哈希值进行bit数据的长度取模,获取每个哈希值在数组的对应位置

3)把对应位置的bit位设置为1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值