真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何保持MySQL和Redis中的數(shù)據(jù)一致

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

創(chuàng)新互聯(lián)建站專注于企業(yè)成都營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、扎賚諾爾網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、成都商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為扎賚諾爾等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

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

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

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

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

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

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

  2. 異步策略

  3. 定時(shí)策略

實(shí)時(shí)策略是最常用的策略,能夠讓用戶有最好的體驗(yàn),但是一旦數(shù)據(jù)量過(guò)大就會(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)定的方案

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

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

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

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

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

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

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

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

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

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

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

延時(shí)雙刪策略

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

  1. 先刪緩存

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

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

  4. 再刪緩存

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

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

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


新聞標(biāo)題:如何保持MySQL和Redis中的數(shù)據(jù)一致
分享路徑:http://weahome.cn/article/iedhii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部