2020年Java面試題-----說一下redis的RedLock(紅鎖)及原理介紹

  1. Redlock是一種算法,Redlock也就是 Redis Distributed Lock,可用實現多節點redis的分佈式鎖。
  2. RedLock官方推薦,Redisson完成了對Redlock算法封裝。
  3. 此種方式具有以下特性:
    1. 互斥訪問:即永遠只有一個 client 能拿到鎖
    2. 避免死鎖:最終 client 都可能拿到鎖,不會出現死鎖的情況,即使鎖定資源的服務崩潰或者分區,仍然能釋放鎖。
    3. 容錯性:只要大部分 Redis 節點存活(一半以上),就可以正常提供服務
  4. RedLock原理(瞭解)
    1. 獲取當前Unix時間,以毫秒爲單位。
    2. 依次嘗試從N個實例,使用相同的key和隨機值獲取鎖。在步驟2,當向Redis設置鎖時,客戶端應該設置一個網絡連接和響應超時時間,這個超時時間應該小於鎖的失效時間。例如你的鎖自動失效時間爲10秒,則超時時間應該在5-50毫秒之間。這樣可以避免服務器端Redis已經掛掉的情況下,客戶端還在死死地等待響應結果。如果服務器端沒有在規定時間內響應,客戶端應該儘快嘗試另外一個Redis實例。
    3. 客戶端使用當前時間減去開始獲取鎖時間(步驟1記錄的時間)就得到獲取鎖使用的時間。當且僅當從大多數(這裏是3個節點)的Redis節點都取到鎖,並且使用的時間小於鎖失效時間時,鎖纔算獲取成功。
    4. 如果取到了鎖,key的真正有效時間等於有效時間減去獲取鎖所使用的時間(步驟3計算的結果)。
    5. 如果因爲某些原因,獲取鎖失敗(沒有在至少N/2+1個Redis實例取到鎖或者取鎖時間已經超過了有效時間),客戶端應該在所有的Redis實例上進行解鎖(即便某些Redis實例根本就沒有加鎖成功)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章