国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

生產(chǎn)實(shí)踐:Redis與Mysql的數(shù)據(jù)強(qiáng)一致性方案

這篇具有很好參考價(jià)值的文章主要介紹了生產(chǎn)實(shí)踐:Redis與Mysql的數(shù)據(jù)強(qiáng)一致性方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

數(shù)據(jù)庫(kù)和Redis如何保持強(qiáng)一致性,這篇文章告訴你

目的

Redis和Msql來(lái)保持?jǐn)?shù)據(jù)同步,并且強(qiáng)一致,以此來(lái)提高對(duì)應(yīng)接口的響應(yīng)速度,剛開(kāi)始考慮是用mybatis的二級(jí)緩存,發(fā)現(xiàn)坑不少,于是決定自己搞

要關(guān)注的問(wèn)題點(diǎn)

操作數(shù)據(jù)必須是唯一索引

如果更新數(shù)據(jù)不是唯一索引,則數(shù)據(jù)庫(kù)更新后的值,與緩存不一致,而查詢(xún)還會(huì)走緩存,而查詢(xún)的值是臟值。

查詢(xún)唯一數(shù)據(jù),數(shù)據(jù)值必須是全部字段

假如:B交易查詢(xún)字段不是全部字段,進(jìn)行查詢(xún)放入緩存,A交易進(jìn)行查詢(xún)時(shí),從緩存獲取,由于A(yíng)交易需要全部字段,所以就會(huì)出現(xiàn)不可預(yù)知的問(wèn)題。

查詢(xún)緩存數(shù)據(jù)后,必須要在程序中再次進(jìn)行條件判斷

因?yàn)樵趓edis中,存儲(chǔ)的的key是唯一索引,所以當(dāng)查詢(xún)數(shù)據(jù)后,只會(huì)命中唯一索引的數(shù)據(jù),其他附帶查詢(xún)條件不生效。

例如:唯一索引為:user_id ,那么執(zhí)行
select * from t_user_auth_info where user_id=‘111’ and user_level=‘1’是,條件user_level是不會(huì)生效

高并發(fā)場(chǎng)景下要注意臟數(shù)據(jù)的控制

假設(shè)是以上流程圖,在更新操作,第一步刪除緩存后,線(xiàn)程切換到查詢(xún)線(xiàn)程,查詢(xún)操作判斷緩存中沒(méi)有數(shù)據(jù),就會(huì)查詢(xún)數(shù)據(jù)庫(kù),并把數(shù)據(jù)存入到緩存中,這時(shí)線(xiàn)程在切換到更新線(xiàn)程,進(jìn)行數(shù)據(jù)庫(kù)的更新,這會(huì)就會(huì)造成,數(shù)據(jù)庫(kù)的數(shù)據(jù)與緩存有不一致性。

最終方案

基于以上問(wèn)題,我們的最終流程圖如下

以上流程圖在進(jìn)行更新操作時(shí),增加刪除緩存lock,如果這會(huì)查詢(xún)操作判斷緩存中有數(shù)據(jù),就直接返回?cái)?shù)據(jù),如果沒(méi)有再次判斷有沒(méi)有存在刪除緩存lock,如果有則走數(shù)據(jù)庫(kù)查詢(xún),并返回,不放入緩存,如果沒(méi)有則查詢(xún)數(shù)據(jù)庫(kù),并放入緩存,并返回。

注意: 登記緩存標(biāo)識(shí)時(shí),增加緩存lock失效時(shí)間,因?yàn)橛锌赡軇h除緩存和數(shù)據(jù)庫(kù)更新成功了,而刪除緩存lock失敗了,那這樣后續(xù)查詢(xún)就都走數(shù)據(jù)庫(kù)了,這個(gè)方案就失去意義了。

代碼實(shí)現(xiàn)方案

通過(guò)aop對(duì)db的操作方法,進(jìn)行攔截,查詢(xún)方法采用一個(gè)切面,刪除和更新方法采用一個(gè)切面,然后再按照以上流程進(jìn)行編寫(xiě),我們這邊是使用框架進(jìn)行封裝,最后只需要開(kāi)發(fā)人員配置以下xml即可

<cache-config>
	<cache-entity po="com.demo.po.AuthUser" key-prefix="SYSTEM_Person" po-throws="true" key-expire="" key-expire-time-unit="">
		<key-properties>userId</key-properties>		
	</cache-entity>
</cache-config>

掃描下面的二維碼關(guān)注我們的微信公眾帳號(hào),在微信公眾帳號(hào)中回復(fù)?加群?即可加入到我們的技術(shù)討論群里面共同學(xué)習(xí)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-746980.html

到了這里,關(guān)于生產(chǎn)實(shí)踐:Redis與Mysql的數(shù)據(jù)強(qiáng)一致性方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Redis和MySQL如何保持?jǐn)?shù)據(jù)一致性

    Redis和MySQL如何保持?jǐn)?shù)據(jù)一致性

    在高并發(fā)的場(chǎng)景下,大量的請(qǐng)求直接訪(fǎng)問(wèn)Mysql很容易造成性能問(wèn)題。所以,我們都會(huì)用Redis來(lái)做數(shù)據(jù)的緩存,削減對(duì)數(shù)據(jù)庫(kù)的請(qǐng)求。但是,Mysql和Redis是兩種不同的數(shù)據(jù)庫(kù),如何保證不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)的一致性就非常關(guān)鍵了。 在高并發(fā)的業(yè)務(wù)場(chǎng)景下,數(shù)據(jù)庫(kù)大多數(shù)情況都是用

    2024年01月18日
    瀏覽(31)
  • MySQL和Redis如何保證數(shù)據(jù)一致性

    MySQL和Redis如何保證數(shù)據(jù)一致性

    MySQL與Redis都是常用的數(shù)據(jù)存儲(chǔ)和緩存系統(tǒng)。為了提高應(yīng)用程序的性能和可伸縮性,很多應(yīng)用程序?qū)ySQL和Redis一起使用,其中MySQL作為主要的持久存儲(chǔ),而Redis作為主要的緩存。在這種情況下,應(yīng)用程序需要確保MySQL和Redis中的數(shù)據(jù)是同步的,以確保數(shù)據(jù)的一致性。 “數(shù)據(jù)一致

    2024年02月12日
    瀏覽(28)
  • MySQL和Redis如何保證數(shù)據(jù)一致性?

    MySQL和Redis如何保證數(shù)據(jù)一致性?

    由于緩存的高并發(fā)和高性能已經(jīng)在各種項(xiàng)目中被廣泛使用,在讀取緩存這方面基本都是一致的,大概都是按照下圖的流程進(jìn)行操作: 但是在更新緩存方面,是更新完數(shù)據(jù)庫(kù)再更新緩存還是直接刪除緩存呢?又或者是先刪除緩存再更新數(shù)據(jù)庫(kù)?在這一點(diǎn)上就值得探討了。 在實(shí)

    2024年02月01日
    瀏覽(26)
  • Redis數(shù)據(jù)一致性問(wèn)題的三種解決方案

    Redis數(shù)據(jù)一致性問(wèn)題的三種解決方案

    Redis(Remote Dictionary Server ),是一個(gè)高性能的基于Key-Value結(jié)構(gòu)存儲(chǔ)的NoSQL開(kāi)源數(shù)據(jù)庫(kù)。大部分公司采用Redis來(lái)實(shí)現(xiàn)分布式緩存,用來(lái)提高數(shù)據(jù)查詢(xún)效率。 在Web應(yīng)用發(fā)展的初期,系統(tǒng)的訪(fǎng)問(wèn)和并發(fā)并不高,交互也比較少。但隨著業(yè)務(wù)的擴(kuò)大,訪(fǎng)問(wèn)量的提升,使得服務(wù)器負(fù)載和關(guān)系

    2024年02月14日
    瀏覽(22)
  • 如何保障MySQL和Redis的數(shù)據(jù)一致性?

    如何保障MySQL和Redis的數(shù)據(jù)一致性?

    先拋一下結(jié)論:在滿(mǎn)足實(shí)時(shí)性的條件下,不存在兩者完全保存一致的方案,只有最終一致性方案。根據(jù)網(wǎng)上的眾多解決方案,總結(jié)出 6 種,直接看目錄: ? ? 不好的方案 ? 1、先寫(xiě) MySQL,再寫(xiě) Redis ? ? ? 如圖所示: ? 這是一副時(shí)序圖,描述請(qǐng)求的先后調(diào)用順序; ? 橘黃色的

    2024年02月08日
    瀏覽(16)
  • redis和數(shù)據(jù)庫(kù)的一致性問(wèn)題的解決方案

    redis和數(shù)據(jù)庫(kù)的一致性問(wèn)題的解決方案

    當(dāng)前沒(méi)有框架能夠保證redis的數(shù)據(jù)和數(shù)據(jù)庫(kù)的完全一致性,所以需要 我們自己在性能和一致性上作取舍。 下圖就是兩種在redis緩存數(shù)據(jù)庫(kù)內(nèi)容時(shí)的使用。 那么如一個(gè)節(jié)點(diǎn)的兩個(gè)圖: 緩存的生成,是在首次查詢(xún)或者緩存過(guò)期時(shí)間到或者緩存被其他業(yè)務(wù)刪除,進(jìn)而需要在數(shù)據(jù)庫(kù)

    2023年04月08日
    瀏覽(18)
  • mysql和redis如何保證數(shù)據(jù)庫(kù)一致性

    如果對(duì)于小公司的單機(jī)服務(wù)器來(lái)說(shuō)在更新和刪除mysql數(shù)據(jù)的同時(shí)對(duì)redis緩存進(jìn)行更新或者刪除就行,一般有兩個(gè)選擇,例如: 先更新MySQL,后刪除(或更新)Redis 先刪除(或更新)Redis,后更新MySQL 但是不管使用其中哪種方式,都存在兩個(gè)可能的問(wèn)題: 由于第一步與第二步并不是原

    2023年04月24日
    瀏覽(25)
  • Redis緩存MySQL數(shù)據(jù)庫(kù)存儲(chǔ)二者如何保證數(shù)據(jù)一致性

    在大型互聯(lián)網(wǎng)應(yīng)用中,由于數(shù)據(jù)庫(kù)讀寫(xiě)頻繁、壓力大等原因,我們通常會(huì)使用緩存來(lái)減少數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)次數(shù),提高系統(tǒng)的性能。而Redis作為一個(gè)高性能的內(nèi)存數(shù)據(jù)庫(kù),成為了緩存的首選方案之一。但是,緩存和數(shù)據(jù)庫(kù)之間存在數(shù)據(jù)一致性的問(wèn)題,如何解決這個(gè)問(wèn)題呢?本文將

    2023年04月19日
    瀏覽(27)
  • MySQL與Redis數(shù)據(jù)雙寫(xiě)一致性工程落地案例

    MySQL與Redis數(shù)據(jù)雙寫(xiě)一致性工程落地案例

    多個(gè)線(xiàn)程同時(shí)去查詢(xún)數(shù)據(jù)庫(kù)的這條數(shù)據(jù),那么我們可以在第一個(gè)查詢(xún)數(shù)據(jù)的請(qǐng)求上使用一個(gè) 互斥鎖來(lái)鎖住它。 其他的線(xiàn)程走到這一步拿不到鎖就等著,等第一個(gè)線(xiàn)程查詢(xún)到了數(shù)據(jù),然后做緩存。 后面的線(xiàn)程進(jìn)來(lái)發(fā)現(xiàn)已經(jīng)有緩存了,就直接走緩存。 ? canal [k?\\\'n?l],中文翻譯

    2024年02月03日
    瀏覽(31)
  • MySQL數(shù)據(jù)庫(kù)和Redis緩存一致性的更新策略

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包