分布式锁的实现方式主要有三种,分别基于Redis、ZooKeeper和数据库。
- 基于Redis实现分布式锁:这是目前使用较多的一种方式。
- 基于ZooKeeper实现分布式锁:ZooKeeper有各种重连的策略,只有重连失败后才会删除节点,这就需要用户根据自己的需求设置合适的重连策略。
- 基于数据库实现分布式锁:这通常有两种做法,分别是基于数据库的乐观锁和悲观锁。乐观锁机制是通过在数据库表中引入一个版本号(version)字段来实现的,如果不是则更新失败,说明在这个过程中有其它的进程去更新过数据了。悲观锁也叫作排它锁,在Mysql中是基于forupdate来实现加锁的。通过forupdate操作,数据库在查询的时候就会给正在查询的记录加上排它锁。