分布式锁技术选型
常见的有三种:mysql,redis,zookeeper
zookeeper和redis分布式锁的技术对比
- 性能:redis基于内存,zookeeper基于磁盘,所以在性能上redis> zookeeper
- 自动释放:zookeeper加锁是基于服务端和客户端的连接来保证的,一旦连接断了,那么锁就会自动释放。死锁风险比redis少
- 一致性和可用性要求:zookeeper本身设计理念就是CP的,它的主从数据同步是基于同步的方式。就是同步的时候主节点会被阻塞住,无法返回客户端响应,更能保证一致性;redis强调可用性,AP
总结
- 一致性高用 zookeeper
- 可用高 用 redis
经验之谈
- 尽量用redis,不要用zk
- 多实例场景下,RedLock和zk机制很像,都是通过半数以上提交来实现的
- redis比较方便
- 业务上做好幂等校验就行了,业务没问题就行
- 而且用分布式锁时性能要求肯定高,如果不高的话,你直接用数据库的悲观锁就好了。没必要用分布式锁
- 如果你实在是接受不了短暂的不一致性,重复加锁的问题,or项目强依赖于zk
ps:而且用分布式锁时性能要求肯定高???为什么??