分布式锁技术选型

常见的有三种: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:而且用分布式锁时性能要求肯定高???为什么??

如果让你自己来实现的话,你会怎么设计?