精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試前必須要知道的Redis面試

數據庫 其他數據庫 Redis
今天來分享一下Redis幾道常見的面試題:如何解決緩存雪崩,如何解決緩存穿透,如何保證緩存與數據庫雙寫時一致的問題?

今天來分享一下Redis幾道常見的面試題:

  • 如何解決緩存雪崩?
  • 如何解決緩存穿透?
  • 如何保證緩存與數據庫雙寫時一致的問題?

一、緩存雪崩

1.1 什么是緩存雪崩?

回顧一下我們為什么要用緩存(Redis):

 

 

為什么要緩存

 

 

現在有個問題,如果我們的緩存掛掉了,這意味著我們的全部請求都跑去數據庫了。

 

 

如果緩存掛掉了,全部請求跑去數據庫了

 

 

在前面學習我們都知道Redis不可能把所有的數據都緩存起來(內存昂貴且有限),所以Redis需要對數據設置過期時間,并采用的是惰性刪除+定期刪除兩種策略對過期鍵刪除。Redis對過期鍵的策略+持久化

如果緩存數據設置的過期時間是相同的,并且Redis恰好將這部分數據全部刪光了。這就會導致在這段時間內,這些緩存同時失效,全部請求到數據庫中。

這就是緩存雪崩:

  • Redis掛掉了,請求全部走數據庫。
  • 對緩存數據設置相同的過期時間,導致某段時間內緩存失效,請求全部走數據庫。

緩存雪崩如果發生了,很可能就把我們的數據庫搞垮,導致整個服務癱瘓!

1.2 如何解決緩存雪崩?

對于“對緩存數據設置相同的過期時間,導致某段時間內緩存失效,請求全部走數據庫。”這種情況,非常好解決:

  • 解決方法:在緩存的時候給過期時間加上一個隨機值,這樣就會大幅度的減少緩存在同一時間過期。

對于“Redis掛掉了,請求全部走數據庫”這種情況,我們可以有以下的思路:

  • 事發前:實現Redis的高可用(主從架構+Sentinel 或者Redis Cluster),盡量避免Redis掛掉這種情況發生。
  • 事發中:萬一Redis真的掛了,我們可以設置本地緩存(ehcache)+限流(hystrix),盡量避免我們的數據庫被干掉(起碼能保證我們的服務還是能正常工作的)
  • 事發后:redis持久化,重啟后自動從磁盤上加載數據,快速恢復緩存數據。

二、緩存穿透

2.1 什么是緩存穿透

比如,我們有一張數據庫表,ID都是從1開始的(正數):

 

 

隨便找了一張數據庫表

 

 

但是可能有黑客想把我的數據庫搞垮,每次請求的ID都是負數。這會導致我的緩存就沒用了,請求全部都找數據庫去了,但數據庫也沒有這個值啊,所以每次都返回空出去。

緩存穿透是指查詢一個一定不存在的數據。由于緩存不***,并且出于容錯考慮,如果從數據庫查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,失去了緩存的意義。

 

 

緩存穿透

 

 

這就是緩存穿透:

  • 請求的數據在緩存大量不***,導致請求走數據庫。

緩存穿透如果發生了,也可能把我們的數據庫搞垮,導致整個服務癱瘓!

2.1 如何解決緩存穿透?

解決緩存穿透也有兩種方案:

  • 由于請求的參數是不合法的(每次都請求不存在的參數),于是我們可以使用布隆過濾器(BloomFilter)或者壓縮filter提前攔截,不合法就不讓這個請求到數據庫層!
  • 當我們從數據庫找不到的時候,我們也將這個空對象設置到緩存里邊去。下次再請求的時候,就可以從緩存里邊獲取了。
    • 這種情況我們一般會將空對象設置一個較短的過期時間。

參考資料:

  • 緩存系列文章--5.緩存穿透問題

https://carlosfu.iteye.com/blog/2248185

三、緩存與數據庫雙寫一致

3.1 對于讀操作,流程是這樣的

上面講緩存穿透的時候也提到了:如果從數據庫查不到數據則不寫入緩存。

一般我們對讀操作的時候有這么一個固定的套路:

  • 如果我們的數據在緩存里邊有,那么就直接取緩存的。
  • 如果緩存里沒有我們想要的數據,我們會先去查詢數據庫,然后將數據庫查出來的數據寫到緩存中。
  • ***將數據返回給請求

3.2 什么是緩存與數據庫雙寫一致問題?

如果僅僅查詢的話,緩存的數據和數據庫的數據是沒問題的。但是,當我們要更新時候呢?各種情況很可能就造成數據庫和緩存的數據不一致了。

  • 這里不一致指的是:數據庫的數據跟緩存的數據不一致

 

數據庫和緩存的數據不一致

 

從理論上說,只要我們設置了鍵的過期時間,我們就能保證緩存和數據庫的數據最終是一致的。因為只要緩存數據過期了,就會被刪除。隨后讀的時候,因為緩存里沒有,就可以查數據庫的數據,然后將數據庫查出來的數據寫入到緩存中。

除了設置過期時間,我們還需要做更多的措施來盡量避免數據庫與緩存處于不一致的情況發生。

3.3 對于更新操作

一般來說,執行更新操作時,我們會有兩種選擇:

  • 先操作數據庫,再操作緩存
  • 先操作緩存,再操作數據庫

首先,要明確的是,無論我們選擇哪個,我們都希望這兩個操作要么同時成功,要么同時失敗。所以,這會演變成一個分布式事務的問題。

所以,如果原子性被破壞了,可能會有以下的情況:

  • 操作數據庫成功了,操作緩存失敗了。
  • 操作緩存成功了,操作數據庫失敗了。

如果***步已經失敗了,我們直接返回Exception出去就好了,第二步根本不會執行。

下面我們具體來分析一下吧。

3.3.1操作緩存操作緩存也有兩種方案:

  • 更新緩存
  • 刪除緩存

一般我們都是采取刪除緩存緩存策略的,原因如下:

  1. 高并發環境下,無論是先操作數據庫還是后操作數據庫而言,如果加上更新緩存,那就更加容易導致數據庫與緩存數據不一致問題。(刪除緩存直接和簡單很多)
  2. 如果每次更新了數據庫,都要更新緩存【這里指的是頻繁更新的場景,這會耗費一定的性能】,倒不如直接刪除掉。等再次讀取時,緩存里沒有,那我到數據庫找,在數據庫找到再寫到緩存里邊(體現懶加載)

基于這兩點,對于緩存在更新時而言,都是建議執行刪除操作!

3.3.2先更新數據庫,再刪除緩存正常的情況是這樣的:

  • 先操作數據庫,成功;
  • 再刪除緩存,也成功;

如果原子性被破壞了:

  • ***步成功(操作數據庫),第二步失敗(刪除緩存),會導致數據庫里是新數據,而緩存里是舊數據。
  • 如果***步(操作數據庫)就失敗了,我們可以直接返回錯誤(Exception),不會出現數據不一致。

如果在高并發的場景下,出現數據庫與緩存數據不一致的概率特別低,也不是沒有:

  • 緩存剛好失效
  • 線程A查詢數據庫,得一個舊值
  • 線程B將新值寫入數據庫
  • 線程B刪除緩存
  • 線程A將查到的舊值寫入緩存

要達成上述情況,還是說一句概率特別低

因為這個條件需要發生在讀緩存時緩存失效,而且并發著有一個寫操作。而實際上數據庫的寫操作會比讀操作慢得多,而且還要鎖表,而讀操作必需在寫操作前進入數據庫操作,而又要晚于寫操作更新緩存,所有的這些條件都具備的概率基本并不大。

對于這種策略,其實是一種設計模式:Cache Aside Pattern

 

 

先修改數據庫,再刪除緩存

 

 

刪除緩存失敗的解決思路:

  • 將需要刪除的key發送到消息隊列中
  • 自己消費消息,獲得需要刪除的key
  • 不斷重試刪除操作,直到成功

3.3.3先刪除緩存,再更新數據庫正常情況是這樣的:

  • 先刪除緩存,成功;
  • 再更新數據庫,也成功;

如果原子性被破壞了:

  • ***步成功(刪除緩存),第二步失敗(更新數據庫),數據庫和緩存的數據還是一致的。
  • 如果***步(刪除緩存)就失敗了,我們可以直接返回錯誤(Exception),數據庫和緩存的數據還是一致的。

看起來是很美好,但是我們在并發場景下分析一下,就知道還是有問題的了:

  • 線程A刪除了緩存
  • 線程B查詢,發現緩存已不存在
  • 線程B去數據庫查詢得到舊值
  • 線程B將舊值寫入緩存
  • 線程A將新值寫入數據庫

所以也會導致數據庫和緩存不一致的問題。

并發下解決數據庫與緩存不一致的思路:

  • 將刪除緩存、修改數據庫、讀取緩存等的操作積壓到隊列里邊,實現串行化。

 

將操作積壓到隊列中

 

3.4對比兩種策略

我們可以發現,兩種策略各自有優缺點:

  • 先刪除緩存,再更新數據庫
    • 在高并發下表現不如意,在原子性被破壞時表現優異
  • 先更新數據庫,再刪除緩存(Cache Aside Pattern設計模式)
    • 在高并發下表現優異,在原子性被破壞時表現不如意

3.5 其他保障數據一致的方案與資料

可以用databus或者阿里的canal監聽binlog進行更新。

參考資料:

  • 緩存更新的套路

https://coolshell.cn/articles/17416.html

  • 如何保證緩存與數據庫雙寫時的數據一致性?

https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-consistence.md

  • 分布式之數據庫和緩存雙寫一致性方案解析

https://zhuanlan.zhihu.com/p/48334686

  • Cache Aside Pattern

https://blog.csdn.net/z50l2o08e2u4aftor9a/article/details/81008933

***

這是幾道Redis常見的面試題,希望大家看完有所幫助,順利拿到offer! 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2019-08-06 14:54:22

Hadoop數據集海量數據

2012-04-09 13:16:20

DIVCSS

2018-11-28 10:00:42

React組件前端

2014-01-10 13:29:44

微軟Office 365云計算

2011-07-13 11:03:17

ASP

2021-06-07 14:04:13

并發編程Future

2024-05-06 10:16:46

2019-03-23 20:00:04

面試react.js前端

2010-07-27 11:24:51

Flex

2020-09-08 14:05:06

Redis數據庫緩存

2020-11-10 08:30:58

Gartner數字化技術

2024-04-09 16:24:18

Promise開發

2022-08-10 12:02:52

面試JavaScript

2023-05-12 14:49:47

CSS框架前端

2024-08-06 14:54:16

2017-12-01 17:35:02

2019-07-31 09:06:35

Java跳槽那些事兒文章

2022-09-27 14:36:57

JavaScrip數組開發

2017-11-03 15:39:29

深度學習面試問答
點贊
收藏

51CTO技術棧公眾號

美女精品导航| 99精品欧美一区二区| 成人video亚洲精品| 国产精品资源站在线| 欧美激情日韩图片| 精品无码在线视频| 久久爱.com| 性欧美大战久久久久久久久| 日韩电影免费观看在| 国产精品欧美久久久久天天影视| 午夜日韩在线| 伊人久久男人天堂| 国产精品igao网网址不卡| 黄色软件视频在线观看| 中文在线一区二区| 国产精品青青草| 最近中文在线观看| 亚洲国产第一| 久久激情视频久久| 真人bbbbbbbbb毛片| 岛国精品在线| 欧美日韩免费在线观看| 中文字幕日韩一区二区三区| 香蕉视频黄在线观看| 国模大尺度一区二区三区| 欧美一级高清免费播放| 青青青在线视频| 日韩大片在线观看| 日韩黄色高清视频| 亚洲精品一区二区18漫画| av成人亚洲| 色噜噜夜夜夜综合网| 免费观看国产精品视频| www.欧美日本韩国| 中文字幕av一区二区三区| 国产自产在线视频一区| 国产露脸91国语对白| 免费一级片91| 茄子视频成人在线| 国产亚洲欧美精品久久久www| 久久国产影院| 夜夜嗨av一区二区三区免费区| 91玉足脚交白嫩脚丫| 97青娱国产盛宴精品视频| 欧美一区二区三区在线观看视频 | 大桥未久恸哭の女教师| 日韩黄色在线| 在线成人av网站| 一道本在线免费视频| av成人亚洲| 欧美日韩一二区| 久久精品视频91| 亚洲精品粉嫩美女一区| 色婷婷av一区二区三区大白胸| 日日摸日日碰夜夜爽无码| 欧美videossex| 亚洲一级二级三级| 精品久久久久久无码中文野结衣| 丰满诱人av在线播放| 亚洲午夜一区二区三区| 丁香花在线影院观看在线播放| 成人性生交大片免费看在线播放| 亚洲国产日韩av| 日本在线xxx| 在线观看的黄色| 色av成人天堂桃色av| 可以免费在线看黄的网站| 欧美aaa大片视频一二区| 欧美日韩精品福利| 青青草原播放器| 国产精品丝袜在线播放| 精品视频在线播放免| 国产真实乱人偷精品人妻| 怕怕欧美视频免费大全| 日韩一区二区精品视频| 欧美成人一二三区| 亚洲视屏一区| 日韩免费观看av| 在线观看国产小视频| 国产精品综合在线视频| 国产精品一区而去| 九色在线视频| 中文字幕日韩一区| 国产资源在线免费观看| 在线观看爽视频| 欧美日韩夫妻久久| 女性生殖扒开酷刑vk| 国产精品一区2区3区| 久久久成人av| 99精品视频99| 激情综合色播五月| 国产欧美日韩一区| 成人免费高清在线播放| 亚洲图片激情小说| 日韩激情免费视频| 精品国产乱码久久久久久樱花| 精品久久久久久久人人人人传媒| 在线免费观看成年人视频| 99精品视频精品精品视频| 久久免费少妇高潮久久精品99| 日韩精品一区不卡| 国产一区在线不卡| 玖玖玖精品中文字幕| 在线观看男女av免费网址| 欧美日韩亚洲激情| 波多野结衣三级视频| 国产成人1区| 久久久久久久久亚洲| 欧美性受xxx黑人xyx性爽| 国产成人av影院| 亚洲一区二区精品在线观看| 成人女同在线观看| 在线综合视频播放| 国产在线观看h| 在线不卡欧美| 成人羞羞国产免费| 九色视频网站在线观看| 亚洲午夜免费视频| 性生活免费在线观看| 亚洲黄页网站| 欧美精品videosex性欧美| 中国黄色一级视频| 久久久噜噜噜久久中文字幕色伊伊| 无码人妻精品一区二区蜜桃百度| 欧美极品免费| 亚洲精品www久久久| 欧美另类视频在线观看| 毛片av中文字幕一区二区| 欧美国产一二三区| av免费不卡国产观看| 欧美高清www午色夜在线视频| 成人性生交大免费看| 在线精品在线| 国产精品国产精品| 黄网av在线| 欧美一区二区三区免费大片| 日本美女xxx| 老司机午夜精品视频在线观看| 国产亚洲欧美另类一区二区三区| 国产在线69| 欧美日本一道本在线视频| 亚洲欧美va天堂人熟伦| 三级不卡在线观看| 色女人综合av| 欧美xo影院| 亚洲天堂av在线播放| 亚洲欧美精品一区二区三区| av高清久久久| 欧美日韩国产精品激情在线播放| 久久国产精品免费精品3p| 欧美精品久久久久久久免费观看| 精品人妻少妇嫩草av无码专区| 亚洲人成伊人成综合网小说| 国产欧美精品一二三| 国产精品x453.com| 亚洲精品女av网站| 91麻豆免费在线视频| 日韩三级在线免费观看| 久久久久成人网站| 成人高清免费观看| 久在线观看视频| 深爱激情综合网| 国产精品wwww| 久草中文在线观看| 日韩精品一区二区在线观看| 日本少妇激情视频| 91免费版在线| 亚洲 欧美 日韩系列| 五月天久久久| 高清不卡日本v二区在线| 精品日韩av| 日韩精品中文字幕在线播放| 无码人妻精品一区二区50| 中文欧美字幕免费| 日本一二三区在线| 日韩午夜黄色| 神马影院午夜我不卡| 亚洲天堂网站| 久久久久久久色| 男男电影完整版在线观看| 欧美日韩大陆一区二区| 精品99久久久久成人网站免费| 99re在线视频这里只有精品| 久久久久久久久久久久91| 欧美成人国产| 麻豆亚洲一区| 精品一区二区三区在线观看视频| 久久久久久成人精品| 成人动漫在线免费观看| 日韩区在线观看| 精品人妻无码一区二区性色| 专区另类欧美日韩| 真人bbbbbbbbb毛片| 精品一二三四在线| 国产九色porny| 久久中文亚洲字幕| 国产日本一区二区三区| 精品乱码一区二区三区四区| 欧美精品激情blacked18| 国产日产精品久久久久久婷婷| 欧美一级黄色大片| 久久久精品毛片| 亚洲综合一区二区三区| 神马久久久久久久久久久| 成人免费视频一区| 天堂视频免费看| 国产亚洲一级| 超碰10000| 日本久久精品| 国产在线精品一区| aa亚洲一区一区三区| 青青久久aⅴ北条麻妃| 日本片在线看| 日韩在线欧美在线| 国产黄在线播放| 日韩av一区在线观看| 国产乱子伦精品无码码专区| 色琪琪一区二区三区亚洲区| 久久综合色综合| 中文字幕欧美一| 老熟妇一区二区| 91小视频在线观看| 无码国产精品一区二区免费式直播 | 亚洲精品国产欧美在线观看| 亚洲地区一二三色| 538精品在线视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 99精品视频在线| 日韩av在线电影观看| 另类在线视频| 国产精品久久7| 99a精品视频在线观看| 亚洲一区二区三区777| 福利一区二区免费视频| 国产精品xxx视频| 欧美7777| 国产91精品在线播放| 波多野结衣久久精品| 97久久久久久| freexxx性亚洲精品| 久久久久九九九九| 男男gaygays亚洲| 欧美二区在线播放| 亚洲综合伊人久久大杳蕉| 日韩中文在线中文网在线观看| 久久电影中文字幕| 国产亚洲欧美另类中文| 国内精品在线视频| 亚洲人成电影网站色www| 日韩成人黄色| 亚洲香蕉av在线一区二区三区| 国产一区二区影视| 中文字幕欧美日韩在线| 91在线视频| 久久视频免费观看| 中文字幕伦理免费在线视频| 久久亚洲影音av资源网| 中文字幕在线观看网站| 久久免费成人精品视频| 特级毛片在线| 韩国v欧美v日本v亚洲| 国产极品在线观看| 日本久久久久久久久| 在线观看精品| 成人综合网网址| 亚洲伊人影院| 久久综合中文色婷婷| 成久久久网站| 美国av在线播放| 亚洲日本免费| 欧洲熟妇精品视频| 精品一区二区三区香蕉蜜桃| 97超碰免费在线观看| 成人综合婷婷国产精品久久蜜臀 | 国产精品熟女久久久久久| 91精品国产综合久久久久久| www.国产麻豆| 亚洲欧美激情四射在线日| 18免费在线视频| 欧美激情亚洲精品| 韩国美女久久| 91网在线免费观看| 久久香蕉精品香蕉| 日本高清久久一区二区三区| 久久久久久久久久久久久久久久久久| 国产a级黄色大片| 亚洲自啪免费| 午夜福利123| 久久亚洲精品国产精品紫薇| 天美传媒免费在线观看| 亚洲综合成人在线| 日韩黄色片网站| 欧美大片国产精品| 国内在线免费高清视频| 欧美激情18p| 国产一区二区精品调教| 91一区二区三区| 欧美日韩第一| 成人一区二区免费视频| 麻豆成人综合网| 亚洲精品乱码久久| 中文字幕亚洲一区二区av在线| 久久久久久久伊人| 欧美电影一区二区三区| 男男电影完整版在线观看| 精品视频9999| 国产第一亚洲| 欧美日韩国产一二| 伊人久久婷婷| 日本人dh亚洲人ⅹxx| 国产亚洲污的网站| 日韩av在线天堂| 在线综合视频播放| 国产污视频在线| 性亚洲最疯狂xxxx高清| 精品久久亚洲| 亚洲欧洲免费无码| 国产亚洲激情| 99re这里只有| 一区二区三区加勒比av| 91中文字幕在线视频| 亚洲性生活视频| 色多多在线观看| 国产精品一区二区三区免费观看 | 久久高清视频免费| 99只有精品| 婷婷五月色综合| 美女黄色成人网| theav精尽人亡av| 婷婷综合在线观看| 黄色一级a毛片| 色综合色综合久久综合频道88| 99久久999| 一本二本三本亚洲码| 精品一区二区三区香蕉蜜桃 | 欧美一区二区三区久久精品茉莉花| 国产成人手机视频| 久久人人超碰精品| 六月丁香婷婷综合| 日韩精品免费在线视频观看| h片在线观看视频免费| 国产高清自拍一区| 黄色成人在线网站| 韩国三级视频在线观看| 亚洲专区一二三| 成人精品在线播放| 欧美激情视频一区二区三区不卡| 亚洲一区二区免费在线观看| 国产黄色激情视频| 不卡一区二区三区四区| 国产亚洲欧美精品久久久久久| 精品国产制服丝袜高跟| 免费在线观看的电影网站| 国产精品嫩草在线观看| 日韩视频精品在线观看| 国产熟妇搡bbbb搡bbbb| 在线精品观看国产| 一广人看www在线观看免费视频| 国产在线精品一区免费香蕉| 亚洲女同中文字幕| 香蕉视频xxx| 亚洲高清免费观看| 天堂а√在线8种子蜜桃视频 | 女人帮男人橹视频播放| 成人深夜在线观看| 视频一区二区三区四区五区| 国产亚洲a∨片在线观看| 亚洲ww精品| www.亚洲视频.com| 99精品在线观看视频| 黄色污污网站在线观看| 色妞久久福利网| 亚洲天堂中文字幕在线观看| 自慰无码一区二区三区| 国产农村妇女毛片精品久久麻豆| 中文字幕在线观看你懂的| 蜜臀久久99精品久久久无需会员 | 日韩中文字幕在线免费| 久久综合狠狠综合久久激情| 中文字幕一区二区三区免费看| 久久亚洲精品毛片| 欧美freesex8一10精品| 精品久久久久久中文字幕2017| 国产精品卡一卡二卡三| 蜜桃av噜噜一区二区三区麻豆| 欧美在线xxx| 99精品美女| 成人无码www在线看免费| 欧美日韩激情一区| 99在线视频影院| 亚洲一区三区电影在线观看| 成人的网站免费观看| 自拍偷拍第八页| 午夜欧美不卡精品aaaaa| 欧美电影免费播放| 日韩无码精品一区二区| 欧美高清性hdvideosex| 在线高清av| 免费人成自慰网站| 国产精品人成在线观看免费|