人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

上億高并發(fā),如何保證緩存與數(shù)據(jù)庫的雙寫一致性

發(fā)布日期:2021-06-11 17:12 | 文章來源:YINGSOO

  【內(nèi)容聲明】文章部分內(nèi)容源于互聯(lián)網(wǎng),僅作參考!如需咨詢“上億高并發(fā),如何保證緩存與數(shù)據(jù)庫的雙寫一致性”等有關(guān)服務(wù)器、云主機租用、托管、配置、價格問題,請立即咨詢YINGSOO客服,為您答疑解惑!

  【推薦主機】法國物理服務(wù)器 | 美國高防服務(wù)器 | 美國站群服務(wù)器

  【常見問題】日本云服務(wù)器怎么樣?日本云服務(wù)器與香港云服務(wù)器對比

上億高并發(fā),如何保證緩存與數(shù)據(jù)庫的雙寫一致性

  現(xiàn)在將高速緩存應(yīng)用于業(yè)務(wù)當中已經(jīng)十分常見了,甚至可能跟數(shù)據(jù)庫的頻率不相上下。你的用戶量如果上去了,直接將一個裸的 MySQL 去扛住所有壓力明顯是不合理的。這里的高速緩存,目前業(yè)界主流的就是 Redis 了,如何保證緩存與數(shù)據(jù)庫的雙寫一致性?

  你只要用緩存,就可能會涉及到緩存與數(shù)據(jù)庫雙存儲雙寫,你只要是雙寫,就一定會有數(shù)據(jù)一致性的問題,那么你如何解決一致性問題?

  上億高并發(fā),如何保證緩存與數(shù)據(jù)庫的雙寫一致性?

  1、最初級的緩存不一致問題以及解決方案

  問題:先修改數(shù)據(jù)庫,再刪除緩存,如果刪除緩存失敗了,那么會導(dǎo)致數(shù)據(jù)庫中是新數(shù)據(jù),緩存中是舊數(shù)據(jù),數(shù)據(jù)出現(xiàn)不一致。

  解決思路:

  先刪除緩存,再修改數(shù)據(jù)庫,如果刪除緩存成功了修改數(shù)據(jù)庫失敗了,那么數(shù)據(jù)庫中是舊數(shù)據(jù),緩存中是空的,那么數(shù)據(jù)不會不一致,因為讀的時候緩存沒有,則讀數(shù)據(jù)庫中舊數(shù)據(jù),然后更新到緩存中。

  2、并發(fā)下數(shù)據(jù)緩存不一致問題分析

  問題:

  第一個請求數(shù)據(jù)發(fā)生變更,先刪除了緩存,然后要去修改數(shù)據(jù)庫,此時還沒來得及去修改;

  第二個請求過來去讀緩存,發(fā)現(xiàn)緩存空了,去查詢數(shù)據(jù)庫,查到了修改前的舊數(shù)據(jù),放到了緩存中;

  第三個請求讀取緩存中的數(shù)據(jù) (此時第一個請求已經(jīng)完成了數(shù)據(jù)庫修改的操作)。

  完了,數(shù)據(jù)庫和緩存中的數(shù)據(jù)不一樣了。。。。

  問題分析:

  只有在對同一條數(shù)據(jù)并發(fā)讀寫的時候,才可能會出現(xiàn)這種問題。其實如果說你的并發(fā)量很低的話,特別是讀并發(fā)很低,每天訪問量就1萬次,那么很少的情況下,會出現(xiàn)剛才描述的那種不一致的場景;但如果每天的是上億的流量,每秒并發(fā)讀是幾萬,每秒只要有數(shù)據(jù)更新的請求,就可能會出現(xiàn)上述的數(shù)據(jù)庫+緩存不一致的情況。

  解決思路:

  數(shù)據(jù)庫的緩存更新與讀取操作進行串行化,一個隊列對應(yīng)一個工作線程,每個工作線程串行拿到對應(yīng)的操作,然后一條一條的執(zhí)行。

  1. 首先我們的項目里維護一組線程池和內(nèi)存隊列。

  2. 更新數(shù)據(jù)的時候,根據(jù)數(shù)據(jù)的唯一標識將請求路由到一個jvm隊列中,去更新數(shù)據(jù)庫,然后請求結(jié)束。

  3. 讀取數(shù)據(jù)的時候,先查緩存,如果發(fā)現(xiàn)數(shù)據(jù)不在緩存中,那么將根據(jù)唯一標識路由之后,也發(fā)送同一個jvm內(nèi)部的隊列中,重新讀取數(shù)據(jù)庫后更新緩存,最后請求結(jié)束。

  這里有一個需要優(yōu)化的點,比如一個隊列中,連續(xù)存在多個更新緩存請求串在一起是沒意義的,這樣重復(fù)的查詢數(shù)據(jù)庫并更新緩存的操作應(yīng)該優(yōu)化:如果發(fā)現(xiàn)隊列中已經(jīng)有一個更新緩存的請求了,那么就不用再放個更新請求操作進去了,直接讓后面的讀請求阻塞個200ms左右(這里只是舉個例子,實際值可以根據(jù)服務(wù)的響應(yīng)時間和機器的處理能力來計算),然后再次查詢緩存,如果緩存沒有值就查數(shù)據(jù)庫,拿到結(jié)果后不用更新緩存,直接返回給頁面即可。

  高并發(fā)解決方案:

  優(yōu)惠產(chǎn)品:香港云服務(wù)器租用去首頁注冊領(lǐng)券!YINGSOO最新推出Bzz蜂群挖礦服務(wù)器Bzz蜂群母雞服務(wù)器、Swarm Bzz挖礦教程【圖文教程】Swarm Bzz挖礦教程【視頻教程】,《swarm bzz挖礦資料大全》,Bzz節(jié)點租用請咨詢YINGSOO客服!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部