Reids:
- Redis只保證最終一致性,副本間的數(shù)據(jù)復(fù)制是異步進行(Set是寫,Get是讀,Reids集群一般是讀寫分離架構(gòu),存在主從同步延遲情況),主從切換之后可能有部分數(shù)據(jù)沒有復(fù)制過去可能會 「丟失鎖」 情況,故強一致性要求的業(yè)務(wù)不推薦使用Reids,推薦使用zk。
- Redis集群各方法的響應(yīng)時間均為最低。隨著并發(fā)量和業(yè)務(wù)數(shù)量的提升其響應(yīng)時間會有明顯上升(公網(wǎng)集群影響因素偏大),但是極限qps可以達到最大且基本無異常
ZooKeeper:
- 使用ZooKeeper集群,鎖原理是使用ZooKeeper的臨時順序節(jié)點,臨時順序節(jié)點的生命周期在Client與集群的Session結(jié)束時結(jié)束。因此如果某個Client節(jié)點存在網(wǎng)絡(luò)問題,與ZooKeeper集群斷開連接,Session超時同樣會導(dǎo)致鎖被錯誤的釋放(導(dǎo)致被其他線程錯誤地持有),因此ZooKeeper也無法保證完全一致。
- ZK具有較好的穩(wěn)定性;響應(yīng)時間抖動很小,沒有出現(xiàn)異常。但是隨著并發(fā)量和業(yè)務(wù)數(shù)量的提升其響應(yīng)時間和qps會明顯下降。
總結(jié):
- Zookeeper每次進行鎖操作前都要創(chuàng)建若干節(jié)點,完成后要釋放節(jié)點,會浪費很多時間;
- 而Redis只是簡單的數(shù)據(jù)操作,沒有這個問題。

【5分鐘背八股】48:ZooKeeper和Reids做分布式鎖的區(qū)別?.png