Redis Redlock算法的實現比普通的單實例實現更安全。
Redlock可供參考的實現庫
**Redission** Java語言實現的。
安全和活性失效保障
為什么基于故障轉移的實現還不夠
單實例實現分布式鎖的正確方式
Redlock算法
這個算法是異步的嗎?
失效時重試
釋放鎖
安全爭議
活性爭議
性能,崩潰恢復和Redis同步
使算法更加可靠:鎖的擴展(擴展TTL)
如果業務的工作可以拆分為許多小步驟,可以將有效時間設置的小一些,使用擴展TTL的機制。
在工作進行的過程中,當發現鎖剩下的有效時間很短時,可以再次向redis的所有實例發送一個Lua腳本,讓key的有效時間延長一點。**前提是**<u>*key存在且value是之前設置的value*</u>
客戶端擴展TTL時必須像首次取得鎖一樣在大多數實例上擴展成功,才算再次取到鎖,并且是在有效時間內再次取到鎖(算法和獲取鎖是非常相似的)
擴展鎖的過程中仍然需要達到(N/2 + 1)個實例的這個要求,否則活性特性之一就會失效。