掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在傳統(tǒng)單體應(yīng)用單機部署的情況下,并發(fā)問題可以通過使用Java并發(fā)相關(guān)的鎖如synchronized,但是當(dāng)規(guī)模上升到分布式集群的情況下,要控制共享資源訪問,就需要通過分布式鎖來實現(xiàn)。常見的分布式鎖方案如數(shù)據(jù)庫樂觀鎖,Redis鎖,zk鎖等。

Redis分布式鎖可以有多種方式實現(xiàn)但是其核心就是通過以下三個Redis命令組合實現(xiàn)。
上面為Redis的一個最簡單的鎖實現(xiàn)原理,實際中還需要考慮更多具體的情況作出相應(yīng)的調(diào)整。如
實際開發(fā)環(huán)境中不確定的因素有很多,需要慢慢地去調(diào)整實踐達到理想狀態(tài),可以考慮使用redisson框架來實現(xiàn)。
這個情況比較獨特,出現(xiàn)這個問題的根本原因在于鎖失效的時間小于業(yè)務(wù)處理的時間導(dǎo)致業(yè)務(wù)還沒處理完畢鎖就釋放了。那么解決方案是合理地結(jié)合業(yè)務(wù)去設(shè)置鎖失效的時間。
但是也有更好的方案就如前文提到的redisson,其中的可重入鎖概念。
默認情況下,加鎖的時間是30秒.如果加鎖的業(yè)務(wù)沒有執(zhí)行完,那么到 30-10 = 20秒的時候,就會進行一次續(xù)期,把鎖重置成30秒。
分布式鎖的需求產(chǎn)生
分布式鎖的需求是伴隨著應(yīng)用分布式部署而來的,在單體應(yīng)用,且只部署一臺服務(wù)器的情況下,通過java的同步鎖即可實現(xiàn)。同步鎖,即是一個原子性的操作。
那么當(dāng)應(yīng)用進行了分布式部署,應(yīng)用有多個服務(wù),這個時候應(yīng)用服務(wù)端就沒有一個可提供原子性操作的地方了,Redis性能高,且是單線程,因此可提供一個原子性操作的地方,利用它,就可以實現(xiàn)分布式鎖。
用場景說話,使用Redis分布式鎖的場景如下圖所示:
如下圖所示,隨后會根據(jù)場景說明分布式鎖及續(xù)期相關(guān)問題的來龍去脈。
到此,以上就是小編對于redis如何設(shè)置不過期時間和日期的問題就介紹到這了,希望這1點解答對大家有用。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流