Java面试题(26)-缓存三大问题雪崩,击穿和穿透

缓存三大问题:雪崩击穿穿透

总的来说,这三个问题都是因为高并发导致的

雪崩:

那么雪崩就是因为海量请求,导致缓存宕机,然后间接导致数据库和程序代码都崩坏。总结:导致程序中的各个环节连锁崩溃,就是雪崩。

那么解决的方法,就是比如说在我们的网关做限流,或者熔断,或者使用别的方法进行多级缓存,比如nginx

 

 

 

击穿:

关键词就是单点,这个就是针对单个功能进行多次请求,比如双十一,或者12306这种会在瞬间有多次请求,那么缓存正好在这个时间点,过期了,导致本来应该缓存处理的请求,直接到了数据库的层面,直接将数据库冲垮了,就是我们的击穿。

解决办法呢:也是可以通过多级缓存解决的,或者不给缓存设置过期时间

 

穿透

访问数据库中不存在的key,.乱臣贼子非得访问不存在的key,还疯狂访问,缓存中不存在,然后就去数据库查嘛,你查一次不行,你还疯狂的查,你短时间的多次请求,甚至直接做个程序去请求,导致直接把数据库冲垮了,这就是穿透

解决办法呢:这里有个东东叫做布隆过滤器,基于布隆算法,它可以快速匹配某个key是否存在数据库,请求过来会先到布隆过滤器中,查询到这个key不存在就直接返回了,就不会到数据库了。

 

 

布隆过滤器:

其中的数据结构是bitmap

那么它是怎么快速查询的呢,比如要查询存不存在study这个key ,他会进行多次哈希,得到多个哈希值,那么就会在bitmap的对应位置标记为某个数值比如是1  ,那么在请求的时候,就把传入进来的参数也进行相同的哈希,然后去找对应的位置,看看是不是同时为1,如果同时为1 就代表存在,反之不存在

 

那么这个查询方法,也就是布隆算法怎么就快了呢,它的时间复杂度是O1。所以快。那么用到了哈希算法,那么就避免不了一个问题,那就是哈希冲突,或者叫做哈希碰撞。那么解决的办法就是 增加哈希次数,或者增加哈希难度,复杂度,降低重复的概率。

时间复杂度

这里说一下时间复杂度O1的意思就是不管你数据结构长度为多少,那么我的耗费时间都是一样的,那么什么是On呢,On就是耗费的时间跟着数据结构的长度走,数据结构长,耗费时间也长。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值