redis的分布式锁而言:
- 它获取锁的方式简单粗暴,如果获取不到锁,会不断尝试获取锁,比较消耗性能。
- Redis是AP模型,在集群模式中由于数据的一致性会导致锁出现问题,即便使用Redlock算法来实现,在某些复杂场景下,也无法保证其实现100%的可靠性。
zookeeper分布式锁而言:
- zookeeper天生设计定位就是分布式协调,强一致性。锁的模型健壮、简单易用、适合做分布式锁。
- 如果获取不到锁,只需要添加一个监听器就可以了,不用一直轮询,性能消耗较小。
如果要在两者之间做选择,就我个人而言的话,比较推崇 ZK 实现的锁,因为对于分布式锁而言, 它应该符合 CP 模型,但是 Redis 是 AP 模型,所以在这个点上, Zookeeper 会更加合适。