任何一個安全的分散式鎖需要滿足下面三個條件:
1和2相對容易,3比較難。
再來看作者的問題:如何防止鎖失效或者過期?
答:如果想要滿足上面條件2,鎖失效機制是必須的,因為如果沒有失效機制,某個客戶端加了鎖,然後自己掛掉了,這時候是沒辦法解鎖的,會死鎖。因此需要給鎖設定失效機制,即使沒有客戶端主動解鎖,也會在失效時間到了之後自動解除。
因為Redis是快取伺服器,為了防止例項重啟丟掉鎖,需要配置持久化策略,讓它把資料儲存在磁碟上。
Redis如下實現分散式鎖,請參考下面文章:
任何一個安全的分散式鎖需要滿足下面三個條件:
互斥:任何時候,一個鎖只能被一個客戶端所有,加鎖過程需要原子操作。不會死鎖:即使某個持有鎖的客戶端掛掉,其他客戶端仍舊可以獲取該鎖。容錯:只要是大部分分散式節點存活,客戶端就可以正常獲取和釋放鎖。1和2相對容易,3比較難。
再來看作者的問題:如何防止鎖失效或者過期?
答:如果想要滿足上面條件2,鎖失效機制是必須的,因為如果沒有失效機制,某個客戶端加了鎖,然後自己掛掉了,這時候是沒辦法解鎖的,會死鎖。因此需要給鎖設定失效機制,即使沒有客戶端主動解鎖,也會在失效時間到了之後自動解除。
因為Redis是快取伺服器,為了防止例項重啟丟掉鎖,需要配置持久化策略,讓它把資料儲存在磁碟上。
Redis如下實現分散式鎖,請參考下面文章:
基於redis的分散式鎖實現 - 後端 - 掘金