新聞中心
這篇文章將為大家詳細(xì)講解有關(guān)redis單線程需要加鎖的原因,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
個(gè)人理解是,雖然redis是單線程,但是可以同時(shí)有多個(gè)客戶端訪問(wèn),每個(gè)客戶端會(huì)有一個(gè)線程??蛻舳嗽L問(wèn)之間存在競(jìng)爭(zhēng)。
因?yàn)榇嬖诙嗫蛻舳瞬l(fā),所以必須保證操作的原子性。比如銀行卡扣款問(wèn)題,獲取余額,判斷,扣款,寫(xiě)回就必須構(gòu)成事務(wù),否則就可能出錯(cuò)。
在傳統(tǒng)單體應(yīng)用單機(jī)部署的情況下,可以使用Java并發(fā)相關(guān)的鎖,如ReentrantLcok或synchronized進(jìn)行互斥控制。但是,隨著業(yè)務(wù)發(fā)展的需要,原單體單機(jī)部署的系統(tǒng),漸漸的被部署在多機(jī)器多JVM上同時(shí)提供服務(wù),這使得原單機(jī)部署情況下的并發(fā)控制鎖策略失效了,為了解決這個(gè)問(wèn)題就需要一種跨JVM的互斥機(jī)制來(lái)控制共享資源的訪問(wèn),這就是分布式鎖要解決的問(wèn)題。
分布式鎖的實(shí)現(xiàn)條件
1、互斥性,和單體應(yīng)用一樣,要保證任意時(shí)刻,只能有一個(gè)客戶端持有鎖
2、可靠性,要保證系統(tǒng)的穩(wěn)定性,不能產(chǎn)生死鎖
3、一致性,要保證鎖只能由加鎖人解鎖,不能產(chǎn)生A的加鎖被B用戶解鎖的情況
Redis實(shí)現(xiàn)分布式鎖不同的人可能有不同的實(shí)現(xiàn)邏輯。
分布式環(huán)境下,數(shù)據(jù)一致性問(wèn)題一直是一個(gè)比較重要的話題,而又不同于單進(jìn)程的情況。分布式與單機(jī)情況下大的不同在于其不是多線程而是多進(jìn)程。多線程由于可以共享堆內(nèi)存,因此可以簡(jiǎn)單的采取內(nèi)存作為標(biāo)記存儲(chǔ)位置。而進(jìn)程之間甚至可能都不在同一臺(tái)物理機(jī)上,因此需要將標(biāo)記存儲(chǔ)在一個(gè)所有進(jìn)程都能看到的地方。
常見(jiàn)的是秒殺場(chǎng)景,訂單服務(wù)部署了多個(gè)實(shí)例。如秒殺商品有4個(gè),第一個(gè)用戶購(gòu)買(mǎi)3個(gè),第二個(gè)用戶購(gòu)買(mǎi)2個(gè),理想狀態(tài)下第一個(gè)用戶能購(gòu)買(mǎi)成功,第二個(gè)用戶提示購(gòu)買(mǎi)失敗,反之亦可。而實(shí)際可能出現(xiàn)的情況是,兩個(gè)用戶都得到庫(kù)存為4,第一個(gè)用戶買(mǎi)到了3個(gè),更新庫(kù)存之前,第二個(gè)用戶下了2個(gè)商品的訂單,更新庫(kù)存為2,導(dǎo)致出錯(cuò)。
關(guān)于redis單線程需要加鎖的原因就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前文章:redis單線程需要加鎖的原因-創(chuàng)新互聯(lián)
文章源于:http://fisionsoft.com.cn/article/dpegjd.html