searchsearch

www.hkeasychat.com

Redis分布式鎖的原理是什麼?如何續期? - 手機數碼電腦討論區

登入     註冊



Redis分布式鎖的原理是什麼?如何續期?

每日頭條發表於 2019-10-27 04:07:53
Redis分布式鎖的原理是什麼?如何續期?

相關內容:
上一篇:怎麼尋找到自己的視頻風格?
下一篇:什麼品牌的熱水器比較好?主要是壽命長一點,萬和的不行,兩年不到就壞了?

更多帖子推薦

手機數碼電腦討論區最新帖子快速翻頁:
234567891011121314151617

比達問答發表於 2019-10-27 04:07:57
在傳統單體應用單機部署的情況下,並發問題可以通過使用Java並發相關的鎖如synchronized,但是當規模上升到分布式集群的情況下,要控制共享資源訪問,就需要通過分布式鎖來實現。常見的分布式鎖方案如數據庫樂觀鎖,Redis鎖,zk鎖等。
Redis分布式鎖的原理是什麼?如何續期?


Redis分布式鎖的原理

Redis分布式鎖可以有多種方式實現但是其核心就是通過以下三個Redis命令組合實現。
    SETNX SETNX key val 當且僅當key不存在時,set一個key為val的字符串,返回1;若key存在,則什麼都不做,返回0。 Expire expire key timeout 為key設置一個超時時間,單位為second,超過這個時間鎖會自動釋放,避免死鎖。 Delete delete key 刪除key
核心思想

    使用setnx獲取鎖。如果成功取到鎖,則使用expire命令為鎖添加一個超時時間,超過該時間則自動釋放鎖。 獲取鎖的時候還設置一個獲取的超時時間,若超過這個時間則放棄獲取鎖。
Redis分布式鎖的原理是什麼?如何續期?

注意

上面為Redis的一個最簡單的鎖實現原理,實際中還需要考慮更多具體的情況作出相應的調整。如
    上面的demo中,當集群系統時間不一致時會有問題當服務器異常關閉或是重啟,加鎖後沒來得急設置鎖超時時間,如何避免死鎖
實際開發環境中不確定的因素有很多,需要慢慢地去調整實踐達到理想狀態,可以考慮使用redisson框架來實現。
如何續期?

這個情況比較獨特,出現這個問題的根本原因在于鎖失效的時間小于業務處理的時間導致業務還沒處理完畢鎖就釋放了。那麼解決方案是合理地結合業務去設置鎖失效的時間。
Redis分布式鎖的原理是什麼?如何續期?


但是也有更好的方案就如前文提到的redisson,其中的可重入鎖概念。
Redis分布式鎖的原理是什麼?如何續期?
默認情況下,加鎖的時間是30秒.如果加鎖的業務沒有執行完,那麼到 30-10 = 20秒的時候,就會進行一次續期,把鎖重置成30秒。
以上就是redis鎖的原理及續期的方式,希望我的回答能對你有所幫助。

0Zombies0發表於 2019-10-27 04:08:06
分布式鎖的需求產生

分布式鎖的需求是伴隨著應用分布式部署而來的,在單體應用,且只部署一台服務器的情況下,通過java的同步鎖即可實現。同步鎖,即是一個原子性的操作。
那麼當應用進行了分布式部署,應用有多個服務,這個時候應用服務端就沒有一個可提供原子性操作的地方了,Redis性能高,且是單線程,因此可提供一個原子性操作的地方,利用它,就可以實現分布式鎖。
Redis分布式鎖的原理是什麼?如何續期?
用場景說話,使用Redis分布式鎖的場景如下圖所示︰

如下圖所示,隨後會根據場景說明分布式鎖及續期相關問題的來龍去脈。

手機數碼電腦討論區

Redis分布式鎖的原理是什麼?如何續期? -END- 

香港交友討論區hkeasychat - 香港社交論壇forum本交友論壇採用forum形式運作,會員所講所post交友話題、發起的交友活動與本交友網立場無關 本頁面任何內容(包括但不限於:『留言、文章』)不代表廣告商同意立場及觀點,本頁面可能出現間接宣傳。hkeasychat旗下討論區業務集團之一 - hkeasychat 香港交友討論區 聯絡我們