缓存穿透,缓存雪崩,缓存击穿以及解决办法

(1)缓存穿透:指的是操作直接穿过了缓存层面,直接到达 db 层面,从而称为缓存穿透。直接查询某一条不存在的数据,就会发生这种情况(其实还是要经过缓存层,只不过缓存层没有这条数据,就会发起 db 层面的操作)。

解决方案:

1. Bloom filter 算法(布隆过滤器???)

2. 空值缓存: 一种比较简单的解决办法,在第一次查询完不存在的数据后,将该 key 与对应的空值也放入缓存中,只不过设定为较短的失效时间,例如几分钟,这样则可以应对短时间的大量的该 key 攻击,设置为较短的失效时间是因为该值可能业务无关,存在意义不大,且该次的查询也未必是攻击者发起,无过久存储的必要,故可以早点失效。

(2) 缓存雪崩:多个缓存数据设置的失效时间相同,在同一时间同时失效,大量系统请求从请求缓存变成请求数据库,造成数据库崩溃。

解决方案:

1. 交错失效时间(即更改数据缓存的有效期,建议设置成固定时间的随机时间,例如设置成 3-5 秒钟中间的任意时间)。

2. redis 高可用

这个思想的含义是,既然 redis 有可能挂掉,那我多增设几台 redis,这样一台挂掉之后其他的还可以继续工作,其实就是搭建的集群。

3. 限流降级

这个解决方案的思想是,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个 key 只允许一个线程查询数据和写缓存,其他线程等待。

4. 数据预热

数据加热的含义就是在正式部署之前,我先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的 key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

(3) 缓存击穿:缓存击穿实际上是缓存雪崩的一个特例,击穿与雪崩的区别即在于击穿是对于特定的热点数据来说,而雪崩是全部数据。(典型例子:微博的热点话题)。

解决方案:1. 二级缓存(参考链接)(阿里双十一流量缓存击穿解决办法)LRU-K 算法

参考:

https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc

https://baijiahao.baidu.com/s?id=1655304940308056733&wfr=spider&for=pc

本文为 今天也想见到你 博客文章,转载无需和我联系,但请注明来自 今天也想见到你 博客 0925.wang
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇