![]() |
1
lesismal 19 小时 25 分钟前 ![]() 这几个定义确实不怎么好,即使是英文原版,加上定义的细节,非常容易让人记混。反正如果有人面试问我这几个,我八成回答不准确。
我喜欢用自己的分类总结,比这三个定义更容易记忆而且更全面。如下: 这几个工程问题根本原因的共性:查询缓存的 key 不存在。主要有两类: 1. 传入的查询的 key 参数本来就不存在。例如传错参数、攻击时黑客随便弄的空 key 。 2. 业务上曾经存在该 key 、但是设置了有效期、查询时过期了。 造成工程问题时的另一个维度就是 key 的数量: 1. 少量 key 2. 大量 key key 不存在的原因、key 的数量维度结合起来的四种情况。 完整详情,欢迎评论: https://gist.github.com/lesismal/3640d2a74db3eaf303bb8d40ecd0de05 |
![]() |
2
nuk 18 小时 18 分钟前 ![]() 穿透是本来 cache 就不会起作用,击穿是本来 cache 需要起作用但没起作用
|
3
xljya 16 小时 47 分钟前
从中文层面的话,是有点迷惑,穿透是不一定破坏结构(光穿透玻璃),但也包含了破坏结构的情况,所以能说击穿是穿透的一个特例
|
4
aarontian 15 小时 24 分钟前 ![]() 我比较排斥的八股属于:哪怕你书本基础再扎实,人再聪明,项目经验再丰富再垂直,但你没专门为了面试背过这个概念,那就会懵。
“什么叫缓存穿透/击穿/雪崩”这个问题就比较典型,一直以来给我的感觉就是为八股而八股的 redis 初代八股。 |
![]() |
5
doraemonki 11 小时 6 分钟前 ![]() 也不知道是谁发明的这些词,说来说去就一句话搞定:缓存查不到了
|
![]() |
6
dapang1221 9 小时 59 分钟前
击穿指的是缓存废了,把后面的数据库击穿了吧,比如某个 cache key 配置的有误,导致缓存没生效,突然成千上万个请求穿过了缓存打到了数据库查询上
|
7
charlie21 9 小时 42 分钟前
缓存查到了
缓存没查到了 这是一个维度的东西 - 缓存应该查到而查到了 缓存不应该查到而查到了 缓存应该查到而没查到 缓存不应该查到而没查到 “查没查到” 和 “应该不应该查到”,这是两个维度的东西。 你举出的那个描述力很低名词 是指 如上四种情况 的哪个情况? |
![]() |
8
doraemonki 8 小时 42 分钟前
@charlie21 你看直接描述大家都懂,况且这个知识点本身属于缓存淘汰策略,非要造个词语出来吗
|
9
SGL OP @charlie21 是比那四种情况中更细的一种情况,短时间大量的针对个别热点缓存的“缓存应该查到而没有查到”,这个短时间短到什么地步——>第一个缓存未命中的请求处理中来不及更新缓存,大量相似请求接踵而至。
|
![]() |
10
doraemonki 8 小时 23 分钟前
@SGL 这么细分下去再排列组合,多少词语都不够用的
|
11
SGL OP @doraemonki 没办法,这玩意儿是 Redis 的八股老题
|
12
SGL OP @doraemonki 不过这个场景挑出来其实也不是没有道理,热点数据失效,就是概念定义的词汇选的不好。
|
13
moverinfo 2 小时 35 分钟前 via iPhone
缓存穿透是意味着缓存不存在,然后使请求打到了 DB ,而 DB 里也没有数据。这时候访问 DB 是没有意义的。而击穿是指热键失效问题,大量的请求打到了同一个键,造成并发访问 DB 的情况,等于缓存失效了。雪崩是指大量的不同的缓存同时失效了。
|