精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人午夜在线| 91久久久久久久久久久久| 日韩系列在线| 欧美日韩国产在线播放网站| 国产三级中文字幕| 四季av日韩精品一区| 老妇喷水一区二区三区| 成人444kkkk在线观看| 国产xxxxxxxxx| 久久精品黄色| 精品久久在线播放| 中文字幕一区二区三区在线乱码 | 国产精品jizz在线观看美国| 日韩精品中文字幕视频在线| 天天干天天av| 亚洲欧美小说色综合小说一区| 中文字幕一区二区三区四区| 精品国产综合| 999久久久久久| 久久久久久婷| 午夜免费在线观看精品视频| 午夜三级在线观看| 精品久久91| 日韩成人小视频| 亚洲精品久久久久久| 日韩欧美精品电影| 午夜伦欧美伦电影理论片| 在线观看欧美一区| 黄色电影免费在线看| 国产精品一二三区在线| 国产精品久久久久久搜索| 一区二区三区视频免费看| 在线看片不卡| 最近2019中文字幕第三页视频| 制服丝袜在线第一页| 国产精品久久久久久久久久久久久久久| 狠狠躁夜夜躁人人躁婷婷91| 黄色一级大片免费| 麻豆免费在线观看| 中文在线资源观看网站视频免费不卡| 久久av一区二区| 亚洲免费黄色片| 国产精品一二三在| 91麻豆精品秘密入口| 国产精品怡红院| 秋霞影院一区二区| 国产脚交av在线一区二区| 91av在线免费视频| 六月婷婷一区| 日韩av日韩在线观看| 成人免费看片98欧美| 一本久道久久久| 韩剧1988在线观看免费完整版| 久久久久久国产精品视频| 偷拍欧美精品| 另类美女黄大片| 亚洲成人生活片| 一区二区蜜桃| 欧美激情国产高清| 日本特黄一级片| av成人毛片| 欧美在线性爱视频| 波多野结衣黄色| 蜜桃视频一区二区三区在线观看| 国产精品久久久久久久久免费看| 波多野结衣影片| 蜜臀久久99精品久久久久宅男 | 国产精品女人久久久| 久久福利资源站| 91嫩草国产在线观看| 亚洲精品一区二区三区四区| 成人黄色大片在线观看| 久久久久久亚洲精品不卡4k岛国| 日韩欧美电影在线观看| 国产欧美中文在线| 中文字幕av日韩精品| 青春草在线免费视频| 亚洲大片精品永久免费| 日本三级免费网站| 国产亚洲精品精品国产亚洲综合| 欧美男男青年gay1069videost | 老司机aⅴ在线精品导航| 精品国产一区二区三区久久久蜜月| 日本人添下边视频免费| 亚洲免费成人av在线| 揄拍成人国产精品视频| 久久r这里只有精品| 怡红院精品视频在线观看极品| 韩国福利视频一区| 中文字幕人妻丝袜乱一区三区| 精品一区二区三区免费观看| 国产嫩草一区二区三区在线观看| 免费观看黄色一级视频| 中文字幕的久久| 毛片av在线播放| 久久sese| 日韩视频国产视频| 五月天综合视频| 欧美大片一区| 日韩免费观看视频| xxxx国产精品| 中文字幕第一区第二区| 国产69精品久久久久久久| 欧美日一区二区三区| 欧美成人激情免费网| 蜜桃无码一区二区三区| 欧美 日韩 国产 一区| 91产国在线观看动作片喷水| 国产一区二区在线视频聊天 | 天天干天天操天天拍| 欧美日韩免费观看一区=区三区| 人人做人人澡人人爽欧美| 国产麻豆精品一区| 国产欧美日韩麻豆91| 日韩 欧美 视频| 国产成人免费9x9x人网站视频 | 蜜臀aⅴ国产精品久久久国产老师| 免费视频亚洲| 欧美精品xxx| 国产女人18毛片水真多| 久久精品一区八戒影视| 18禁免费观看网站| 视频二区欧美毛片免费观看| 国产亚洲精品综合一区91| 久久高清免费视频| 国产精品1024久久| 亚洲一区尤物| 97成人超碰| 亚洲欧美日韩视频一区| 日本在线视频免费| 成人午夜短视频| 国产精品国三级国产av| 大胆国模一区二区三区| 一区二区三区动漫| www.日韩一区| 久久久久久久久一| 日批视频在线免费看| 欧美日韩直播| 国内精品400部情侣激情| 国产aⅴ一区二区三区| 国产精品久久久久久久久免费相片 | 色老头久久综合| 亚洲欧美日本一区| 亚洲啪啪91| 国产精品一区二区三区精品| 日本性爱视频在线观看| 日韩免费观看高清完整版在线观看| 貂蝉被到爽流白浆在线观看| 日本欧美大码aⅴ在线播放| 日本不卡在线观看| 最新日韩一区| 日韩中文字幕免费视频| 一级做a爱片性色毛片| 国产精品久久久久久久第一福利| 日韩肉感妇bbwbbwbbw| 秋霞欧美视频| 国产精品欧美亚洲777777 | 欧美贵妇videos办公室| 国产视频手机在线| 亚洲最大成人网4388xx| 国产亚洲精品成人a| 国产精品www994| 精品一区二区三区国产| 嗯啊主人调教在线播放视频| 亚洲精品久久久久久久久久久| 日韩成人一区二区三区| 26uuu久久天堂性欧美| 不要播放器的av网站| 欧美先锋资源| 亚洲自拍中文字幕| av成人福利| 亚洲欧美中文另类| 91精品国自产| 亚洲一二三级电影| 亚洲av无码国产精品久久| 麻豆精品在线视频| 国内自拍中文字幕| 亚洲ab电影| 成人a在线视频| 日本片在线观看| 亚洲欧美国产精品专区久久| 中文字幕自拍偷拍| 亚洲综合一区在线| 国产美女免费无遮挡| 激情综合亚洲精品| 免费看国产一级片| 日本a级不卡| 国产精品对白一区二区三区| 六月婷婷综合| 久久电影一区二区| 你懂的视频在线| 欧美一区二区播放| 欧美男人亚洲天堂| 一区二区三区蜜桃| 国产伦精品一区二区三区视频女| 国模一区二区三区白浆| 精品人妻少妇一区二区| 色综合狠狠操| 九九九九九精品| 国产日韩在线观看视频| 日本高清不卡在线| a级影片在线| 一个人www欧美| 日韩一级中文字幕| 欧美一区二区三区在线视频| 国产91精品一区| 亚洲精品国产无天堂网2021| 亚洲人成人无码网www国产| 国产成人精品三级麻豆| 男女男精品视频站| 亚洲作爱视频| 男人添女荫道口喷水视频| 日产午夜精品一线二线三线| 国产亚洲一区二区三区在线播放| 香蕉久久一区| 国产91色在线免费| 手机av在线| 久久久免费在线观看| 黄色动漫在线观看| 尤物九九久久国产精品的分类| 色哟哟国产精品色哟哟| 日韩精品综合一本久道在线视频| 国产美女www爽爽爽| 日韩欧美在线视频| 日韩av在线天堂| 亚洲国产精品久久一线不卡| 欧美成人一区二区三区高清| 国产精品久久午夜夜伦鲁鲁| 国产一二三四五区| 91视视频在线观看入口直接观看www | 艹b视频在线观看| 免费在线成人| 69堂免费视频| 宅男噜噜噜66国产日韩在线观看| 欧美日韩午夜爽爽| 在线观看日韩| 青青草原网站在线观看| 国产精品99久久精品| 亚洲一区二区三区涩| 狠狠综合久久av一区二区蜜桃| 精品乱色一区二区中文字幕| 国产精品一线| 国产精品一区二区欧美黑人喷潮水| 亚洲日本va中文字幕| 999视频在线观看| 麻豆视频久久| www.av一区视频| 911亚洲精品| 国产精品一区视频| 国产美女撒尿一区二区| 国产免费一区二区三区| 美女一区二区在线观看| 久久久久久艹| 国产一区二区三区四区| 日本成人黄色| 婷婷综合网站| 国产色一区二区三区| 99在线观看免费视频精品观看| 国产精品一区二区免费在线观看| 国产日韩高清一区二区三区在线| 成人在线免费观看av| 性欧美videos另类喷潮| 中文字幕一区二区三区四区在线视频| 日本最新不卡在线| 91丝袜超薄交口足| 床上的激情91.| 中文字幕在线观看网址| 欧美激情一区不卡| 免费三级在线观看| 亚洲电影在线播放| 精品不卡一区二区| 欧美日韩国产另类一区| www.我爱av| 亚洲精品永久免费| 免费网站免费进入在线| 欧美激情在线狂野欧美精品| 欧美亚洲日本精品| 国产欧美日韩专区发布| 欧美激情精品| 欧美成人一区二区在线| 999精品在线| 欧美 日韩 国产 高清| 日韩在线卡一卡二| 国产精品19p| 国产拍揄自揄精品视频麻豆| 国产精品99久久久久久成人| 亚洲第一主播视频| 中文字幕欧美色图| 亚洲成人av在线| 91九色在线porn| 欧美激情在线观看| 欧美爱爱视频| 精选一区二区三区四区五区| 久久精品国产大片免费观看| 人人妻人人澡人人爽欧美一区| 久久九九电影| 一级黄色大片免费看| 国产色产综合色产在线视频 | 精品国产1区2区| 亚洲无码精品在线播放| 亚洲电影第1页| 米奇777四色精品人人爽| 欧美一区二区三区图| 国内不卡的一区二区三区中文字幕 | 国产福利精品一区二区三区| 99久久伊人精品| av成人免费网站| 欧美在线观看你懂的| 欧美熟妇乱码在线一区| 少妇精69xxtheporn| 毛片在线网站| wwwxx欧美| 999国产精品999久久久久久| 久久人妻精品白浆国产| 成人毛片老司机大片| 成人涩涩小片视频日本| 欧美影院精品一区| 欧美高清电影在线| 久久久中精品2020中文| 免费一区二区三区在线视频| 色狠狠久久av五月综合|| 国产一区二区高清| 国产一卡二卡三卡四卡| 亚洲女女做受ⅹxx高潮| 亚洲一区二区人妻| 国产一区二区三区视频在线观看 | 黄色正能量网站| 亚洲国产精品嫩草影院| 午夜精品久久久久久久爽| 色伦专区97中文字幕| 成人看片网页| 欧洲亚洲一区二区| 天堂在线一区二区| 亚洲第一页av| 欧美午夜激情视频| 亚洲AV无码一区二区三区性| 草民午夜欧美限制a级福利片| 99久久亚洲国产日韩美女| 午夜午夜精品一区二区三区文| 亚洲欧美日本日韩| 粉嫩av蜜桃av蜜臀av| 精品国产乱码久久久久久婷婷| 日本免费一区视频| 午夜精品蜜臀一区二区三区免费| caoporn成人| 免费看黄在线看| www.日韩大片| 欧美精品二区三区| 亚洲精品中文字| 日韩不卡免费高清视频| 日韩欧美国产二区| 久久精品免费看| 国产中文av在线| 日韩欧美在线123| 国产精品—色呦呦| 狠狠久久综合婷婷不卡| 久久久久久黄| 中文天堂资源在线| 欧美放荡的少妇| 欧美78videosex性欧美| 国产亚洲自拍偷拍| 玖玖在线精品| 91n在线视频| 精品卡一卡二卡三卡四在线| 99riav视频在线观看| 免费日韩电影在线观看| 日本不卡视频在线| 性色av无码久久一区二区三区| 日韩欧美中文一区二区| 国产福利片在线观看| 日本不卡一区二区三区视频| 肉色丝袜一区二区| 欧美一区二区三区四区在线观看地址 | www.夜夜爱| 91丨国产丨九色丨pron| 极品国产91在线网站| 日日狠狠久久偷偷四色综合免费 | 色天使综合视频| 天天做天天爱天天高潮| 成人小视频在线| 午夜精品一区二| 欧美成人午夜剧场免费观看| 加勒比久久高清| 三级a在线观看| 亚洲最大成人网4388xx| 国产高清一级毛片在线不卡| 91精品久久久久久久久久久久久久| 综合精品一区| 四虎永久免费在线观看| 欧美高清dvd| 中文在线中文资源| 影音先锋男人的网站| 91麻豆国产福利在线观看| 一级久久久久久久| 欧美有码在线视频| 亚洲精品tv久久久久久久久久| 日本黄色动态图| 777欧美精品| 桃花岛成人影院| 隔壁人妻偷人bd中字|