面试:说说你对缓存穿透、缓存击穿、缓存雪崩的了解,怎么解决?

pexels-photo-3836292.jpeg

一、缓存的处理流程

1.一般的请求过程是:

graph LR
A[客服端] -- 请求--> B{服务器}
B--查询-->C((数据库))

为了缓解数据库的压力,就需要设置缓存,可以使用redis来进行缓存

2.有缓存的请求过程

graph LR
A[客服端] -- 请求--> B{服务器}
B--3.查询-->C((数据库))
B--1.先查询-->D((缓存))
D--2.查询结果为null-->B
C--4.返回查询结果-->B
B--5.将查询结果存入缓存中-->D

只有当缓存中数据不存在时,才会查询数据库,然后再将数据存入缓存中,下次再查询时,就会从数据库中查询了,这样就可以减轻了数据库服务器的压力

二、缓存穿透

一般都是恶意攻击才会发生的。

1.描述

当用户访问一个缓存中没有,数据库中也没有的数据,那服务器拿到这个请求之后,就会先访问缓存服务器,再访问数据库,但是并没查询到数据,就没有向缓存中存入数据,这时如果用户一直大量地发出这个请求,就会增大数据库和缓存的压力。

2.解决方法

  1. 在服务器对请求的数据进行校验。例如查询成绩,就需要加一个接口,用来判断要出的成绩是否在0~100的范围,如果不在,就直接返回null,减少不必要的查询。
  2. 在缓存服务器设置一个空数据。当在数据库中也查询不到数据时,直接在缓存中存入一个key-null的数据,当下次再查询这个数据时,就会直接在缓存中查询出一个null数据返回。

三、缓存击穿

1.描述

当缓存中的一个数据的过期时间到了(因为缓存一般都是存储在内存中的,为了节省内存,一般都设置一个过期时间)这时又有大量的用户同时对这个数据进行访问,因为缓存中没有这个数据,就会导致数据库的压力瞬间变大。

2.解决方法

  1. 不对热数据设置过期时间。就是常用的数据不设置过期时间,让缓存一直有这个数据。
  2. 在服务器设置一个自动更新的时间。举个例子,在缓存中给一个数据设置过期时间为30分钟,那在30分钟之后,就对这个数据进行更新。
  3. 对访问数据库的方法加锁。同一时间,只有一个用户能够访问到数据库,这可以极大的降低数据库的压力。

四、缓存雪崩

1.描述

当缓存中的大量数据的过期时间在同一时刻都到了,这时又有很多用户同时访问这些数据,就会导致数据库压力瞬间增大。

2.解决方法

  1. 设置过期时间时使用随机值。当数据的过期时间随机值时,就会极大地减少了数据同时过期的可能性。
  2. 分布式结构的话,可以将数据缓存到多地。当数据缓存到多个缓存服务器中时,缓存中的数据同时过期的概率也会极大的降低。
  3. 可以使用缓存击穿中的解决方法。

五、总结

缓存穿透一般是在缓存中没有数据时才会发生,缓存击穿和缓存雪崩一般是在缓存中的数据的过期时间到了才会发生,而缓存击穿是一个数据过期了,大量用户同时访问;缓存雪崩是大量的数据过期了,大量的用户同时访问不同数据。

最后用一个比较浅显的例子来作为本文的结束吧。
数据库就像我们的身体,缓存就像防弹衣。
当子弹射向我们时,防弹衣里面都是空的(缓存中没有数据)子弹就只能打在我们身上。
当子弹射向我们时,我们正好在更换防弹衣(缓存中的数据过期时间到了)子弹就只能打在我们身上。

我们在解决这些在缓存上发生的问题的目的,就是为了保护数据库。

——————————————————————————————
如果本文章内容有问题,请直接评论或者私信我。
未经允许,不得转载!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容