Skip to content
作者:daily5am创建:-更新:-
字数:预计阅读: 分钟访问量:--

分布式锁实现和选择

分布式锁是分布式系统中的重要组件,理解各种实现方式对于设计分布式系统至关重要。

核心问题

为什么需要分布式锁?

  • 多进程/多服务器环境
  • 保证资源互斥访问
  • 避免数据不一致

分布式锁的实现方式

1. Redis分布式锁

实现方式:

java
SET key value NX EX timeout

问题:

  • 锁过期时间设置困难
  • 锁误释放(其他线程释放)
  • 主从切换导致锁丢失

解决方案:

  • RedLock算法
  • 使用Lua脚本保证原子性
  • 设置唯一标识

2. Zookeeper分布式锁

实现方式:

  • 创建临时顺序节点
  • 判断是否为最小节点
  • 监听前一个节点

优点:

  • 可靠性高
  • 支持公平锁
  • 自动释放

缺点:

  • 性能较低
  • 依赖Zookeeper

3. 数据库分布式锁

实现方式:

sql
INSERT INTO lock_table (lock_key) VALUES ('key');

优点:

  • 实现简单
  • 可靠性高

缺点:

  • 性能较低
  • 数据库压力大

性能对比

方案性能可靠性复杂度
Redis
Zookeeper
数据库

常见面试题

  1. Redis分布式锁的问题?

    • 锁过期时间
    • 锁误释放
    • 主从切换
  2. 如何选择分布式锁?

    • 高性能场景:Redis
    • 高可靠场景:Zookeeper
    • 简单场景:数据库
  3. 分布式锁的死锁问题?

    • 设置过期时间
    • 使用看门狗续期
    • 及时释放锁