欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何保持MySQL和Redis中的數(shù)據(jù)一致-創(chuàng)新互聯(lián)

這篇文章給大家介紹如何保持MySQL和Redis中的數(shù)據(jù)一致,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

為羅平等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及羅平網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、羅平網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

在高并發(fā)的業(yè)務(wù)場景下,MySQL和Redis的數(shù)據(jù)一致性就顯得很重要了,多次訪問MySQL就會(huì)導(dǎo)致奔潰或者延緩速度,而緩存Redis過多也會(huì)出問題,那就是丟數(shù)據(jù),存著存著,數(shù)據(jù)就丟了

Redis 在互聯(lián)網(wǎng)行業(yè)中使用最為廣泛。在很多時(shí)候也被稱為“內(nèi)存數(shù)據(jù)庫”,它集合了緩存和數(shù)據(jù)庫的優(yōu)勢,但并非開啟持久化和主備同步機(jī)制就可以高枕無憂。

寫入數(shù)據(jù)庫成功,即讓緩存失效,下一次讀取時(shí)再緩存。這是緩存的實(shí)時(shí)策略。

從架構(gòu)設(shè)計(jì)的角度思考:緩存就是緩存,緩存數(shù)據(jù)會(huì)隨時(shí)丟失,緩存存在的目的是攔截到數(shù)據(jù)庫的請求,相比數(shù)據(jù)的可靠性、一致性,還是吞吐量、穩(wěn)定性優(yōu)先。

在考慮數(shù)據(jù)一致性的問題上由三種刷新策略

  1. 實(shí)時(shí)策略

  2. 異步策略

  3. 定時(shí)策略

實(shí)時(shí)策略是最常用的策略,能夠讓用戶有最好的體驗(yàn),但是一旦數(shù)據(jù)量過大就會(huì)出現(xiàn),數(shù)據(jù)苦往往會(huì)受不了

異步策略適用于,數(shù)據(jù)量大,但是數(shù)據(jù)并不重要,因?yàn)榭赡軙?huì)導(dǎo)致臟數(shù)據(jù)或者數(shù)據(jù)丟失

定時(shí)策略適用于,數(shù)據(jù)量大,數(shù)據(jù)也很重要的情況下,這也是最穩(wěn)定的方案

讀取的過程,應(yīng)用程序先從 cache 取數(shù)據(jù),沒有得到,則從數(shù)據(jù)庫中取數(shù)據(jù),成功后,放到緩存中。如果命中,應(yīng)用程序從 cache 中取數(shù)據(jù),取到后返回。

寫入的過程,把數(shù)據(jù)存到數(shù)據(jù)庫中,成功后,再刪除緩存,刪除后下次讀取的時(shí)候,會(huì)被寫入緩存。

從用戶體驗(yàn)的角度,應(yīng)該數(shù)據(jù)庫有了寫入,就馬上廢棄緩存,觸發(fā)一次數(shù)據(jù)庫的讀取,從而更新緩存。

然而,這和高并發(fā)就矛盾了——如果所有的都實(shí)時(shí)從數(shù)據(jù)庫里面讀取,高并發(fā)場景下,數(shù)據(jù)庫往往受不了。

在讀取寫入數(shù)據(jù)時(shí),適用定時(shí)策略一般不會(huì)出問題

  1. MySQL持久化數(shù)據(jù),Redis只讀數(shù)據(jù)

  2. MySQL和Redis處理不同的數(shù)據(jù)類型
    MySQL處理實(shí)時(shí)性數(shù)據(jù),Redis處理對實(shí)時(shí)性要求并不是很高的數(shù)據(jù)。在并發(fā)不高的情況下,讀取操作優(yōu)先讀取redis,不存在的話再去訪問MySQL,并把讀取到的數(shù)據(jù)寫回Redis中;寫入操作直接寫MySQL,然后后再寫入Redis。在并發(fā)高的情況下,讀取操作和上面一樣,寫入操作則使用異步寫入,先寫入Redis后直接返回,然后定時(shí)定期的寫入MySQL

而一旦涉及到更新數(shù)據(jù),就容易出現(xiàn)緩存和數(shù)據(jù)庫之間的數(shù)據(jù)一致性的問題,不管是先寫入數(shù)據(jù)庫再刪除緩存,還是先刪除緩存再寫入數(shù)據(jù)庫,都有可能出現(xiàn)數(shù)據(jù)不一致的情況,例如:

  • 先寫入數(shù)據(jù)庫,再刪除緩存前,線程宕機(jī)了,沒有刪除掉緩存,就會(huì)出現(xiàn)數(shù)據(jù)不一致的情況

  • 先刪除Redis,還沒來得及寫入數(shù)據(jù)庫,另外一個(gè)線程就來讀取,發(fā)現(xiàn)緩存為空,這個(gè)時(shí)候就會(huì)跑去數(shù)據(jù)庫讀取數(shù)據(jù)寫入緩存,這個(gè)時(shí)候緩存中的數(shù)據(jù)就是臟數(shù)據(jù)

因?yàn)閷懭牒妥x取是并發(fā)的,沒有辦法保證順序,就會(huì)出現(xiàn)緩存和數(shù)據(jù)庫的數(shù)據(jù)是不一致的問題,這時(shí)候就可以使用

延時(shí)雙刪策略

在寫庫前后都進(jìn)行Redis.del(key)操作,并且設(shè)定合理地超時(shí)時(shí)間

  1. 先刪緩存

  2. 再寫數(shù)據(jù)庫

  3. 休眠一段時(shí)間

  4. 再刪緩存

設(shè)置緩存的過期時(shí)間

理論上來講,設(shè)置緩存過期時(shí)間,是保證最終一致性的解決方案。所有的寫入操作以數(shù)據(jù)庫為準(zhǔn),只要到達(dá)緩存過期時(shí)間,則后面的讀請求自然會(huì)從數(shù)據(jù)庫中讀取新值然后回填緩存

關(guān)于如何保持MySQL和Redis中的數(shù)據(jù)一致就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)頁標(biāo)題:如何保持MySQL和Redis中的數(shù)據(jù)一致-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://www.chinadenli.net/article22/cogocc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)建站公司移動(dòng)網(wǎng)站建設(shè)軟件開發(fā)網(wǎng)站設(shè)計(jì)公司云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站