中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

勝芳網(wǎng)站建設(shè)qiansi湖南靠譜的關(guān)鍵詞優(yōu)化

勝芳網(wǎng)站建設(shè)qiansi,湖南靠譜的關(guān)鍵詞優(yōu)化,中旅遠(yuǎn)洋商務(wù)網(wǎng)站建設(shè)策劃書(shū),國(guó)家市場(chǎng)監(jiān)督管理總局約談白酒【redis】redis緩存與數(shù)據(jù)庫(kù)的一致性【1】四種同步策略【2】更新緩存還是刪除緩存(1)更新緩存(2)刪除緩存【3】先更新數(shù)據(jù)庫(kù)還是先刪除緩存(1)出現(xiàn)失敗時(shí)候的情況1-先刪除緩存,再更新數(shù)據(jù)庫(kù)&…

【redis】redis緩存與數(shù)據(jù)庫(kù)的一致性

  • 【1】四種同步策略
  • 【2】更新緩存還是刪除緩存
    • (1)更新緩存
    • (2)刪除緩存
  • 【3】先更新數(shù)據(jù)庫(kù)還是先刪除緩存
    • (1)出現(xiàn)失敗時(shí)候的情況
      • 1-先刪除緩存,再更新數(shù)據(jù)庫(kù)(更新數(shù)據(jù)庫(kù)失敗了)
      • 2-先更新數(shù)據(jù)庫(kù),再刪除緩存(刪除緩存失敗了)
      • 3-總結(jié)
    • (2)沒(méi)有出現(xiàn)失敗時(shí)候的情況
      • 1-先刪除緩存,再更新數(shù)據(jù)庫(kù)
        • 延時(shí)雙刪解決這個(gè)問(wèn)題
        • 如果是讀寫(xiě)分離的架構(gòu)怎么辦(強(qiáng)制讀主庫(kù))
        • 刪除失敗了怎么辦?
      • 2-先更新數(shù)據(jù)庫(kù),再刪除緩存(最優(yōu)方案)
        • 利用消息隊(duì)列進(jìn)行刪除的補(bǔ)償
  • 【4】總結(jié)

【1】四種同步策略

想要保證緩存與數(shù)據(jù)庫(kù)的雙寫(xiě)一致,一共有4種方式,即4種同步策略:
(1)先更新緩存,再更新數(shù)據(jù)庫(kù);
(2)先更新數(shù)據(jù)庫(kù),再更新緩存;
(3)先刪除緩存,再更新數(shù)據(jù)庫(kù);
(4)先更新數(shù)據(jù)庫(kù),再刪除緩存。

更新緩存與刪除緩存哪種方式更合適?應(yīng)該先操作數(shù)據(jù)庫(kù)還是先操作緩存?

【2】更新緩存還是刪除緩存

(1)更新緩存

(1)優(yōu)點(diǎn)
每次數(shù)據(jù)變化都及時(shí)更新緩存,所以查詢時(shí)不容易出現(xiàn)未命中的情況。

(2)缺點(diǎn)
更新緩存的消耗比較大。如果數(shù)據(jù)需要經(jīng)過(guò)復(fù)雜的計(jì)算再寫(xiě)入緩存,那么頻繁的更新緩存,就會(huì)影響服務(wù)器的性能。如果是寫(xiě)入數(shù)據(jù)頻繁的業(yè)務(wù)場(chǎng)景,那么可能頻繁的更新緩存時(shí),卻沒(méi)有業(yè)務(wù)讀取該數(shù)據(jù)。

(2)刪除緩存

(1)優(yōu)點(diǎn)
操作簡(jiǎn)單,無(wú)論更新操作是否復(fù)雜,都是將緩存中的數(shù)據(jù)直接刪除。

(2)缺點(diǎn)
刪除緩存后,下一次查詢緩存會(huì)出現(xiàn)未命中,這時(shí)需要重新讀取一次數(shù)據(jù)庫(kù)。從上面的比較來(lái)看,一般情況下,刪除緩存是更優(yōu)的方案。

【3】先更新數(shù)據(jù)庫(kù)還是先刪除緩存

(1)出現(xiàn)失敗時(shí)候的情況

首先,我們將先刪除緩存與先更新數(shù)據(jù)庫(kù),在出現(xiàn)失敗時(shí)進(jìn)行一個(gè)對(duì)比:

1-先刪除緩存,再更新數(shù)據(jù)庫(kù)(更新數(shù)據(jù)庫(kù)失敗了)

先刪除緩存再更新數(shù)據(jù)庫(kù),在出現(xiàn)失敗時(shí)可能出現(xiàn)的問(wèn)題:
(1)線程A刪除緩存成功,線程A更新數(shù)據(jù)庫(kù)失敗;
(2)線程B從緩存中讀取數(shù)據(jù);由于緩存被刪,進(jìn)程B無(wú)法從緩存中得到數(shù)據(jù),進(jìn)而從數(shù)據(jù)庫(kù)讀取數(shù)據(jù);此時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)更新失敗,線程B從數(shù)據(jù)庫(kù)成功獲取舊的數(shù)據(jù),然后將數(shù)據(jù)更新到了緩存。
(3)最終,緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)是一致的,但仍然是舊的數(shù)據(jù)

在這里插入圖片描述

2-先更新數(shù)據(jù)庫(kù),再刪除緩存(刪除緩存失敗了)

先更新數(shù)據(jù)庫(kù)再刪除緩存,在出現(xiàn)失敗時(shí)可能出現(xiàn)的問(wèn)題:
(1)線程A更新數(shù)據(jù)庫(kù)成功,線程A刪除緩存失敗;
(2)線程B讀取緩存成功,由于緩存刪除失敗,所以線程B讀取到的是緩存中舊的數(shù)據(jù)。
(3)最后線程A刪除緩存成功,有別的線程訪問(wèn)緩存同樣的數(shù)據(jù),與數(shù)據(jù)庫(kù)中的數(shù)據(jù)是一樣。
(4)最終,緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)是一致的,但是會(huì)有一些線程讀到舊的數(shù)據(jù)。

在這里插入圖片描述

3-總結(jié)

經(jīng)過(guò)上面的比較,我們發(fā)現(xiàn)在出現(xiàn)失敗的時(shí)候,是無(wú)法明確分辨出先刪緩存和先更新數(shù)據(jù)庫(kù)哪個(gè)方式更好,以為它們都存在問(wèn)題。上述場(chǎng)景出現(xiàn)的問(wèn)題,應(yīng)該如何解決呢?都建議采用重試機(jī)制解決。

(2)沒(méi)有出現(xiàn)失敗時(shí)候的情況

1-先刪除緩存,再更新數(shù)據(jù)庫(kù)

(1)線程A刪除緩存成功;
(2)線程B讀取緩存失敗;
(3)線程B讀取數(shù)據(jù)庫(kù)成功,得到舊的數(shù)據(jù);
(4)線程B將舊的數(shù)據(jù)成功地更新到了緩存;
(5)線程A將新的數(shù)據(jù)成功地更新到數(shù)據(jù)庫(kù)。
在這里插入圖片描述可見(jiàn),進(jìn)程A的兩步操作均成功,但由于存在并發(fā),在這兩步之間,進(jìn)程B訪問(wèn)了緩存。最終結(jié)果是,緩存中存儲(chǔ)了舊的數(shù)據(jù),而數(shù)據(jù)庫(kù)中存儲(chǔ)了新的數(shù)據(jù),二者數(shù)據(jù)不一致。

延時(shí)雙刪解決這個(gè)問(wèn)題

如果是先刪緩存、再更新數(shù)據(jù)庫(kù),在沒(méi)有出現(xiàn)失敗時(shí)可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果在實(shí)際的應(yīng)用中,出于某些考慮我們需要選擇這種方式,可以采用延時(shí)雙刪的策略,延時(shí)雙刪的基本思路如下:
(1)刪除緩存;
(2)更新數(shù)據(jù)庫(kù);
(3)sleep N毫秒;
(4)再次刪除緩存。

public void write(String key, Object data) {Redis.delKey(key);db.updateData(data);Thread.sleep(1000);Redis.delKey(key);
}

阻塞一段時(shí)間之后,再次刪除緩存,就可以把這個(gè)過(guò)程中緩存中不一致的數(shù)據(jù)刪除掉。而具體的時(shí)間,要評(píng)估你這項(xiàng)業(yè)務(wù)的大致時(shí)間,按照這個(gè)時(shí)間來(lái)設(shè)定即可。最終保證了數(shù)據(jù)庫(kù)和緩存的數(shù)據(jù)一致

如果是讀寫(xiě)分離的架構(gòu)怎么辦(強(qiáng)制讀主庫(kù))

如果數(shù)據(jù)庫(kù)采用的是讀寫(xiě)分離的架構(gòu),那么又會(huì)出現(xiàn)新的問(wèn)題,如下圖:
此時(shí)來(lái)了兩個(gè)請(qǐng)求,請(qǐng)求 A(更新操作) 和請(qǐng)求 B(查詢操作)
(1)請(qǐng)求 A 更新操作,刪除了 Redis;
(2)請(qǐng)求主庫(kù)進(jìn)?更新操作,主庫(kù)與從庫(kù)進(jìn)行同步數(shù)據(jù)的操作;
(3)請(qǐng) B 查詢操作,發(fā)現(xiàn) Redis 中沒(méi)有數(shù)據(jù);
(4)去從庫(kù)中拿去數(shù)據(jù);
(5)此時(shí)主從同步數(shù)據(jù)還未完成,拿到的數(shù)據(jù)是舊數(shù)據(jù);

在這里插入圖片描述
此時(shí)的解決辦法就是如果是對(duì) Redis 進(jìn)行填充數(shù)據(jù)的查詢數(shù)據(jù)庫(kù)操作,那么就強(qiáng)制將其指向主庫(kù)進(jìn)?查詢。

刪除失敗了怎么辦?

如果刪除依然失敗,則可以增加重試的次數(shù),但是這個(gè)次數(shù)要有限制,當(dāng)超出一定的次數(shù)時(shí),要采取報(bào)錯(cuò)、記日志、發(fā)郵件提醒等措施。

2-先更新數(shù)據(jù)庫(kù),再刪除緩存(最優(yōu)方案)

(1)線程A更新數(shù)據(jù)庫(kù)成功;
(2)線程B讀取緩存成功;
(3)線程A刪除緩存成功。
在這里插入圖片描述
可見(jiàn),最終緩存與數(shù)據(jù)庫(kù)的數(shù)據(jù)是一致的,并且都是最新的數(shù)據(jù)。但線程B在這個(gè)過(guò)程里讀到了舊的數(shù)據(jù),可能還有其他線程也像線程B一樣,在這兩步之間讀到了緩存中舊的數(shù)據(jù),但因?yàn)檫@兩步的執(zhí)行速度會(huì)比較快,所以影響不大。對(duì)于這兩步之后,其他進(jìn)程再讀取緩存數(shù)據(jù)的時(shí)候,就不會(huì)出現(xiàn)類似于進(jìn)程B的問(wèn)題了。

利用消息隊(duì)列進(jìn)行刪除的補(bǔ)償

先更新數(shù)據(jù)庫(kù),后刪除緩存這?種情況也會(huì)出現(xiàn)問(wèn)題,比如更新數(shù)據(jù)庫(kù)成功了,但是在刪除緩存的階段出錯(cuò)了沒(méi)有刪除成功,那么此時(shí)再讀取緩存的時(shí)候每次都是錯(cuò)誤的數(shù)據(jù)了。

此時(shí)解決方案就是利用消息隊(duì)列進(jìn)行刪除的補(bǔ)償。具體的業(yè)務(wù)邏輯?語(yǔ)?描述如下:
(1)請(qǐng)求 線程A 先對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新操作;
(2)在對(duì) Redis 進(jìn)行刪除操作的時(shí)候發(fā)現(xiàn)報(bào)錯(cuò),刪除失敗;
(3)此時(shí)將Redis 的 key 作為消息體發(fā)送到消息隊(duì)列中;
(4)系統(tǒng)接收到消息隊(duì)列發(fā)送的消息后再次對(duì) Redis 進(jìn)行刪除操作;

在這里插入圖片描述但是這個(gè)方案會(huì)有?個(gè)缺點(diǎn)就是會(huì)對(duì)業(yè)務(wù)代碼造成大量的侵入,深深的耦合在?起,所以這時(shí)會(huì)有?個(gè)優(yōu)化的方法,我們知道對(duì) Mysql 數(shù)據(jù)庫(kù)更新操作后再 binlog 日志中我們都能夠找到相應(yīng)的操作,那么我們可以訂閱 Mysql 數(shù)據(jù)庫(kù)的 binlog 日志對(duì)緩存進(jìn)行操作。

【4】總結(jié)

一般情況下,刪除緩存是比更新緩存更優(yōu)的方案;先更新數(shù)據(jù)庫(kù)是比先刪除緩存更優(yōu)的方案;總的來(lái)說(shuō)【先更新數(shù)據(jù)庫(kù),再刪除緩存】就是四個(gè)策略中影響最小,效果最優(yōu)的方案。

但是如果需要使用【先刪除緩存,再更新數(shù)據(jù)庫(kù)】的方案的話,可以使用【延時(shí)雙刪】【讀寫(xiě)分離時(shí)強(qiáng)制讀主庫(kù)】【重試機(jī)制】來(lái)解決問(wèn)題。

如果使用【先更新數(shù)據(jù)庫(kù),再刪除緩存】時(shí)出現(xiàn)刪除緩存失敗的情況,可以使用【binlog同步到redis】來(lái)解決問(wèn)題。

http://m.risenshineclean.com/news/59496.html

相關(guān)文章:

  • 做網(wǎng)站比特幣錢包淘寶關(guān)鍵詞優(yōu)化推廣排名
  • 嘉興市建設(shè)委員會(huì)網(wǎng)站seo實(shí)戰(zhàn)視頻
  • 黃浦網(wǎng)站制作seo國(guó)外推廣軟件
  • 做照片的網(wǎng)站有哪些seo網(wǎng)站關(guān)鍵詞排名優(yōu)化
  • 國(guó)外黑客網(wǎng)站成都多享網(wǎng)站建設(shè)公司
  • 做網(wǎng)站 幫別人賣服務(wù)器地推拉新接單網(wǎng)
  • 開(kāi)發(fā)網(wǎng)站比較好的公司廈門(mén)人才網(wǎng)597人才網(wǎng)
  • 響應(yīng)式網(wǎng)站建設(shè)報(bào)價(jià)單百度信息流投放在哪些平臺(tái)
  • 設(shè)計(jì)網(wǎng)站的三個(gè)要素揭陽(yáng)seo推廣公司
  • 尚云網(wǎng)站建設(shè)網(wǎng)絡(luò)運(yùn)營(yíng)怎么學(xué)
  • favicon wordpress做seo需要用到什么軟件
  • 怎么做公司網(wǎng)站需要什么科目百度問(wèn)答官網(wǎng)
  • 網(wǎng)購(gòu)手表網(wǎng)站查詢網(wǎng)站域名
  • 武漢網(wǎng)絡(luò)推廣公司哪家服務(wù)好長(zhǎng)沙seo男團(tuán)
  • 優(yōu)化網(wǎng)絡(luò)的軟件下載seo百度關(guān)鍵詞優(yōu)化
  • 北京高端網(wǎng)站建設(shè)咸陽(yáng)今日桂林頭條新聞
  • 陜西網(wǎng)站建設(shè)哪家強(qiáng)企業(yè)模板建站
  • 寫(xiě)作網(wǎng)站最大看顏色應(yīng)該搜索哪些詞匯
  • c2c電子商務(wù)網(wǎng)站開(kāi)發(fā)百度熱門(mén)關(guān)鍵詞
  • 免費(fèi)瀏覽器網(wǎng)站品牌營(yíng)銷推廣公司
  • 做搬家服務(wù)網(wǎng)站問(wèn)卷調(diào)查的目的搜索引擎優(yōu)化指南
  • 外貿(mào)建站需要花多少錢站長(zhǎng)之家alexa排名
  • 建設(shè)網(wǎng)站首頁(yè)東莞網(wǎng)站推廣優(yōu)化公司
  • 管理系統(tǒng)門(mén)戶網(wǎng)站開(kāi)發(fā)路線網(wǎng)絡(luò)平臺(tái)推廣
  • 網(wǎng)站名稱是什么網(wǎng)址瀏覽大全
  • 動(dòng)易網(wǎng)站官網(wǎng)網(wǎng)絡(luò)營(yíng)銷的方式都有哪些
  • 怎么創(chuàng)建一個(gè)博客網(wǎng)站嗎企業(yè)查詢免費(fèi)
  • 區(qū)域網(wǎng)站設(shè)計(jì)企業(yè)seo優(yōu)化
  • 網(wǎng)站開(kāi)發(fā)流程百度文庫(kù)seo高級(jí)優(yōu)化技巧
  • 重慶網(wǎng)站設(shè)計(jì)最佳科技推廣運(yùn)營(yíng)