1、前言
1.1、本地锁和分布式锁区别
锁我想对大家都不陌生,在我们刚学习 Java 的时候,肯定知道synchronized和Lock锁
;这两者都是本地锁。
何为本地锁呢?本地锁
就是该锁只针对当前节点有效,也就是当 node A 获取锁时,那么 node B 同样还可以获取锁,这种情况就是本地锁。
如果服务只部署了一个节点的话,用这种本地锁是没有问题的。
现现在很多系统为了抗高并发、高可用和高性能,会部署多节点(集群部署),那么此时如果还用本地锁的话就会出现问题,因此分布式锁
就诞生了。
分布式锁就是当有一个节点获取到锁后,其它节点是不可以获取锁的。
1.2、Redis 分布式锁和 Zookeeper 分布式锁区别
谈起分布式集群,就绕不开CAP理论
,也就是强一致性、可用性和分区容错性
。三者只能选其二,不可兼容。这里我就不具体分析其原因之类了,直接步入两把分布式锁区别。
Redis分布式锁:
它追求的高可用性和分区容错性。Redis 在追求高可用性时会在 Redis 写入主节点数据后,立即返回成功,不关心异步主节点同步从节点数据是否成功。Redis 是基于内存的,性能极高,官方给的指标是每秒可达到 10W 的吞吐量。
Zookeeper分布式锁:
它追求的是强一致性和分区容错性。Zookeeper 在写入主节点数据后会等到从节点同步完数据成后才会返回成功。为了数据的强一致性牺牲了一部分可用性。
两者综合对比下来,技术派为了追求用户体验度
,就采用了 Redis 分布式锁来实现。
2、使用 Redis 分布式锁背景
技术派使用 Redis 分布式锁的背景是,用户根据 articleId 查询
回复