快捷搜索: 王者荣耀 脱发

分布式锁的使用场景是什么?有哪些实现方案?

在单体架构中,多个线程都是属于同一个进程的,所以在线程并发执行时,遇到资源竞争时,可以利用 ReentrantLock 、 synchronized 等技术来作为锁,来控制共享资源的使用。而在分布式架构中,多个线程是可能处于不同进程中的,而这些线程并发执行遇到资源竞争时,利用 ReentrantLock 、 synchronized 等技术是没办法来控制多个进程中的线程的,所以需要分布式锁,意思就是,需要一个分布式锁生成器,分布式系统中的应用程序都可以来使用这个生成器所提供的锁,从而达到多个进程中的线程使用同一把锁。目前主流的分布式锁的实现方案有两种:

  1. zookeeper :利用的是 zookeeper 的临时节点、顺序书点、 watch 机制来实现的, zookeeper 分布式锁的特点是高一致性,因为 zookeeper 保证的是 CP ,所以由它实现的分布式锁更可靠,不会出现混
  2. redis :利用 redis 的 setnx 、 lua 脚本、消费订阅等机制来实现的, redis 分布式锁的特点是高可用,因为 redis 保证的是 AP ,所以由它实现的分布式锁可能不可靠,不稳定(一旦 redis 中的数据出现了不一致),可能会出现多个客户端同时加到锁的情况
经验分享 程序员 微信小程序 职场和发展