色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Redis分布式鎖的原理是什么

錢衛(wèi)國2年前14瀏覽0評論

Redis分布式鎖的原理是什么?

在傳統(tǒng)單體應(yīng)用單機(jī)部署的情況下,并發(fā)問題可以通過使用Java并發(fā)相關(guān)的鎖如synchronized,但是當(dāng)規(guī)模上升到分布式集群的情況下,要控制共享資源訪問,就需要通過分布式鎖來實(shí)現(xiàn)。常見的分布式鎖方案如數(shù)據(jù)庫樂觀鎖,Redis鎖,zk鎖等。

Redis分布式鎖的原理

Redis分布式鎖可以有多種方式實(shí)現(xiàn)但是其核心就是通過以下三個Redis命令組合實(shí)現(xiàn)。

SETNX SETNX key val 當(dāng)且僅當(dāng)key不存在時,set一個key為val的字符串,返回1;若key存在,則什么都不做,返回0。 Expire expire key timeout 為key設(shè)置一個超時時間,單位為second,超過這個時間鎖會自動釋放,避免死鎖。 Delete delete key 刪除key核心思想使用setnx獲取鎖。如果成功取到鎖,則使用expire命令為鎖添加一個超時時間,超過該時間則自動釋放鎖。 獲取鎖的時候還設(shè)置一個獲取的超時時間,若超過這個時間則放棄獲取鎖。注意

上面為Redis的一個最簡單的鎖實(shí)現(xiàn)原理,實(shí)際中還需要考慮更多具體的情況作出相應(yīng)的調(diào)整。如

上面的demo中,當(dāng)集群系統(tǒng)時間不一致時會有問題當(dāng)服務(wù)器異常關(guān)閉或是重啟,加鎖后沒來得急設(shè)置鎖超時時間,如何避免死鎖

實(shí)際開發(fā)環(huán)境中不確定的因素有很多,需要慢慢地去調(diào)整實(shí)踐達(dá)到理想狀態(tài),可以考慮使用redisson框架來實(shí)現(xiàn)。

如何續(xù)期?

這個情況比較獨(dú)特,出現(xiàn)這個問題的根本原因在于鎖失效的時間小于業(yè)務(wù)處理的時間導(dǎo)致業(yè)務(wù)還沒處理完畢鎖就釋放了。那么解決方案是合理地結(jié)合業(yè)務(wù)去設(shè)置鎖失效的時間。

但是也有更好的方案就如前文提到的redisson,其中的可重入鎖概念。

默認(rèn)情況下,加鎖的時間是30秒.如果加鎖的業(yè)務(wù)沒有執(zhí)行完,那么到 30-10 = 20秒的時候,就會進(jìn)行一次續(xù)期,把鎖重置成30秒。

以上就是redis鎖的原理及續(xù)期的方式,希望我的回答能對你有所幫助。

java 單線程,Redis分布式鎖的原理是什么