redis和zk实现分布式锁的优缺点

Redis实现

优点:性能好

缺点:

对某个 redismaster 实例,写入了 myLock 这种锁 key 的 value,此时会异步复制给对应的 masterslave 实例。
但是这个过程中一旦发生 redismaster 宕机,主备切换,redisslave 变为了 redismaster。
接着就会导致,客户端 2 来尝试加锁的时候,在新的 redismaster 上完成了加锁,而客户端 1 也以为自己成功加了锁。
此时就会导致多个客户端对一个分布式锁完成了加锁。
这时系统在业务语义上一定会出现问题,导致各种脏数据的产生。
所以这个就是 rediscluster,或者是 redismaster-slave 架构的主从异步复制导致的 redis 分布式锁的最大缺陷:在 redismaster 实例宕机的时候,可能导致多个客户端同时完成加锁。

ZK实现

优点:高可靠 zk本身通过leader+quorum机制保障高可靠。

缺点:ZooKeeper实现的分布式锁,性能并不太高。为啥呢?
因为每次在创建锁和释放锁的过程中,都要动态创建、销毁瞬时节点来实现锁功能。大家知道,ZK中创建和删除节点只能通过Leader服务器来执行,然后Leader服务器还需要将数据同步到所有的Follower机器上,这样频繁的网络通信,性能的短板是非常突出的。
 

你可能感兴趣的:(Zookeeper研究系列,redis,分布式,java)