在分布式系统中,分布式锁是一种用于控制对共享资源访问的机制,以确保多进程、多线程环境下的数据一致性。分布式锁有多种实现方式,本文将介绍几种常见的分布式锁及其优缺点。
一、基于数据库的分布式锁
实现方式
- 表锁:使用数据库提供的锁机制,例如 MySQL 的
SELECT ... FOR UPDATE
语句。 - 乐观锁:使用版本号或时间戳字段进行并发控制。
- 悲观锁:在表中添加一个锁定状态字段,通过更新该字段实现锁定。
优点
- 实现简单,易于理解。
- 适合小规模的分布式系统和已有的数据库环境。
缺点
- 性能较低,数据库的 IO 开销较大。
- 存在单点故障问题,即数据库故障导致锁机制失效。
- 扩展性差,不适合高并发场景。
示例代码(基于 MySQL 表锁)
sql复制代码
-- 创建锁表
CREATE TABLE `distributed_lock` ( `resource` VARCHAR(64) NOT NULL PRIMARY KEY, `locked` TINYINT(1) NOT NULL DEFAULT 0, `owner` VARCHAR(64) NOT NULL ); -- 获取锁 INSERT INTO distributed_lock (resource, locked, owner) VALUES ('resource_nam