分布式锁实现方式对比!

分布式锁是控制分布式系统不同进程共同访问共享资源的一种锁的实现。

如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。

业界分布式锁的实现,一般有这3种方式:

基于数据库实现的分布式锁

基于Redis实现的分布式锁

基于Zookeeper实现的分布式锁

对比:

  • 从性能角度(从高到低)Redis > Zookeeper >= 数据库。

  • 从实现的复杂性角度(从低到高)Zookeeper > Redis > 数据库。

  • 从可靠性角度(从高到低)Zookeeper > Redis > 数据库。

基于数据库的分布式锁

数据库悲观锁实现的分布式锁:

可以使用select ... for update 来实现分布式锁。

数据库乐观锁实现的分布式锁:

加个version字段,每次更新修改,都会自增加一,然后去更新时,把查出来的那个版本号,带上条件去更新。

如果是上次那个版本号,就更新,如果不是,就继续重试。