Redis的Redlock

  • redlock的前提是有N個redis的master, 這些節點之間沒有主從複製, 或者其他集群協調機制.
  • client從N個節點嘗試獲取鎖, 只要有N/2 + 1個節點獲取成功, 那麼便獲取成功; 如果最終獲取失敗, 客戶端應該在所有的節點上進行解鎖.
  • redlock的出發點是為了解決Redis集群環境下, 出現的分佈式鎖的問題(client1獲取鎖, master 宕機, slave變成master, client2獲取到鎖). 但是redlock的出現並沒有解決這樣的問題.
  • Martin和Redis作者antirez之間的爭辯:

    martin挑了兩個缺點:

    1. 對於提升效率的場景, redlock太重

    2. 對於正確性要求極高的場景, redlock並不能保證正確性;

    問題: 在client1獲取鎖之後, 由於某種原因發生系統停頓, 鎖過期, 然後client1執行操作; client2這時候也會拿到鎖, 就會出現問題)

    問題: A, B, C, D, E 5個redis節點,如果C的時間走得快, client1拿到鎖(A, B, C), C節點先過期, client2又拿到了(C, D, E)這樣就出問題了;

    所以Redis從根本上來說是AP, 而分佈式鎖是要求CP的.


    分享到:


    相關文章: