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