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

Redis與數(shù)據(jù)庫數(shù)據(jù)一致性的示例分析

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)redis與數(shù)據(jù)庫數(shù)據(jù)一致性的示例分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)公司的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個不僅審美在線,而且實用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無止境。

     可能談到保持RedisMySQL雙庫的數(shù)據(jù)一致性,可能很多人最先想到的方案就是讀請求和寫請求串行化,串到一個內(nèi)存隊列里去。  但是這個方案有著一個致命的缺點:讀請求和寫請求串行化會導(dǎo)致系統(tǒng)的吞吐量大幅度降低,需要使用比正常情況下多幾倍的機(jī)器去支撐線上的一個請求。RedisMysql雙庫的數(shù)據(jù)一致性問題為何會出現(xiàn)呢?其實我們可以考慮這么一個業(yè)務(wù)場景:我們需要更新部分?jǐn)?shù)據(jù),我們首先更新數(shù)據(jù)庫數(shù)據(jù),然后清除Redis緩存中的數(shù)據(jù)。但是數(shù)據(jù)庫更新操作成功了,然而Redis清除緩存出現(xiàn)異常了,這樣會導(dǎo)致出現(xiàn)這么一種情況:數(shù)據(jù)庫中的數(shù)據(jù)已經(jīng)更新為最新數(shù)據(jù),但是Redis緩存中的數(shù)據(jù)依舊還是老數(shù)據(jù),這時候就會出現(xiàn)RedisMysql雙庫的數(shù)據(jù)一致性問題。

     有些喜歡投機(jī)取巧的朋友就會想,那我先清掉緩存中的舊數(shù)據(jù),然后再寫入新數(shù)據(jù)到數(shù)據(jù)庫,最后更新緩存不就可以了么?這種方式可能出現(xiàn)一種  問題:我們清除Redis緩存成功了,但是寫入還未將新數(shù)據(jù)寫入到數(shù)據(jù)庫之前有讀請求的發(fā)生,就會導(dǎo)致數(shù)據(jù)庫中的舊數(shù)據(jù)再次存入Redis中,然后等到新數(shù)據(jù)寫入到數(shù)據(jù)庫后,一樣產(chǎn)生了。RedisMysql雙庫的數(shù)據(jù)一致性問題。

     昨天談到Redis分布式環(huán)境其實有說到,分布式環(huán)境下,數(shù)據(jù)讀寫操作是并發(fā)操作,所以導(dǎo)致對用一份數(shù)據(jù)進(jìn)行讀寫操作先后執(zhí)行順序無法保證,所以就可能出現(xiàn)讀操作先于寫操作被執(zhí)行,這時就會出現(xiàn)臟數(shù)據(jù)導(dǎo)致數(shù)據(jù)一致性問題的產(chǎn)生。這時候我們需要考慮我們讀取的數(shù)據(jù)是否是強一致性數(shù)據(jù),比如賬戶余額這種必須是強一致性數(shù)據(jù),則讀數(shù)據(jù)庫,如果讀取的數(shù)據(jù)實時性沒有非常嚴(yán)格,比如積分排行榜等,就可以直接讀取Redis數(shù)據(jù)。如果機(jī)器并發(fā)量不高的情況下,讀取數(shù)據(jù)優(yōu)先從Redis中讀取,緩存中數(shù)據(jù)不存在才選擇從數(shù)據(jù)庫中獲取,并且把從數(shù)據(jù)庫獲取到的數(shù)據(jù)寫入Redis。寫入數(shù)據(jù)則相反,先清除Redis緩存數(shù)據(jù),再寫入數(shù)據(jù)到數(shù)據(jù)庫,如果是簡單數(shù)據(jù)這時候可以實時寫入到Redis中供讀操作讀取,如果是需要多表連表查詢的數(shù)據(jù),則可以暫時不寫入Redis,等到有查詢操作的時候再寫入到Redis

     那如果是高并發(fā)的情況下呢?在高并發(fā)的情況下,讀取數(shù)據(jù)操作和上面是一樣,優(yōu)先從Redis讀取。但是寫入數(shù)據(jù)操作就和剛才做法不一樣了,高并發(fā)的情況下,寫入數(shù)據(jù)先寫入到Redis,然后定期從Redis寫入到Mysql中。高并發(fā)的情況下需要注意的是,每個讀取數(shù)據(jù)的請求都需要在超時時間內(nèi)返回數(shù)據(jù),如果數(shù)據(jù)更新很頻繁,可能會導(dǎo)致Redis積壓了一系列更新操作,從而導(dǎo)致大量的讀取數(shù)據(jù)請求超時,最后這大量的讀取數(shù)據(jù)請求全部壓到數(shù)據(jù)庫,導(dǎo)致緩存擊穿的現(xiàn)象產(chǎn)生,嚴(yán)重可能導(dǎo)致數(shù)據(jù)庫宕機(jī)。這時候解決方案其實一般通過增加機(jī)器來增加吞吐量,或者暫時先返回一個老數(shù)據(jù)給客戶端。
      所以到這里我們其實方案很明確了,一共有兩種比較常見的方案:Redis是作為緩存服務(wù)器使用,一般作為緩存有兩個用途:請求快速處理和減少I/O頻率。減少I/O頻率實際上就是剛才所說的高并發(fā)情況下數(shù)據(jù)實時寫入到數(shù)據(jù)庫,然后數(shù)據(jù)積累到一定程度定期寫入到數(shù)據(jù)庫,請求快速處理就是處理讀請求時有限從Redis中獲取,Redis是支持高并發(fā)操作的,所以處理速度很快,如果Redis中不存在數(shù)據(jù),再去數(shù)據(jù)庫中查詢,然后寫入到redis中緩存,以便二次讀取可以直接從緩存中取到數(shù)據(jù)。

      第二種方案其實就是異步異步緩存,Redis緩存熱門數(shù)據(jù),增刪改查都在Mysql操作,只要Mysqlinsertupdate、delete操作,可以通過kafka或者rabbitMQ等第三方消息推送工具將binlog相關(guān)的消息推送到Redis中,Redis解析binlog中的數(shù)據(jù)對Redis緩存中的數(shù)據(jù)進(jìn)行更新,Mysql中的主從備份機(jī)制也是通過binlog來實現(xiàn)數(shù)據(jù)一致性的。

上述就是小編為大家分享的Redis與數(shù)據(jù)庫數(shù)據(jù)一致性的示例分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章名稱:Redis與數(shù)據(jù)庫數(shù)據(jù)一致性的示例分析
URL地址:http://chinadenli.net/article46/goheeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)ChatGPT、企業(yè)網(wǎng)站制作品牌網(wǎng)站建設(shè)、電子商務(wù)網(wǎng)站改版

廣告

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

成都app開發(fā)公司