0%

分布式锁

单机情况

线程间同步

  • 多线程

进程间同步

  • IPC

实现

互斥量

  • 整型0-1
  • 某个数据的存在与否

数据库唯一索引

  • 上锁

    • 向表中插入记录
  • 解锁

    • 删除表中的记录
  • 特点

    • 无失效时间

      • 定时任务清理表数据
    • 非阻塞

      • 轮询
    • 不可重入

      • 数据库记录主机和进程的信息,获取锁之前先查表

REDIS SETNX

  • SETNX

    • set if not exist

    • 返回值

      • 成功时返回true
      • 失败时返回false
  • EXPIRE

    • 为某个键值对设置过期时间

REDIS REDLOCK

  • 保证单点故障时分布式锁仍可用

  • 规则

    • 尝试从所有Redis实例(n个)获取锁,获得n/2+1个锁后才算上锁成功
    • 上锁失败时要释放上锁过程中获得的锁

Zookeeper

  • 模型

    • 节点

      • 永久

      • 临时

        • 会话结束或超时节点会被删除
      • 有序

        • 根据插入顺序形成数字后缀
  • 监听器

    • 节点状态变更时通知监听者
  • 分布式锁实现

    • 上锁

      • 创建临时且有序的节点
      • 如果当前节点不是序号最小的就监听前一个节点并阻塞
    • 解锁

      • 删除对应的节点
      • 临时节点超时会被删掉