Toc
  1. 步骤
    1. 加锁
    2. 续锁
    3. 删锁
  2. 优化
Toc
0 results found
BOBO
分布式锁
2020/11/21 系统设计

步骤

加锁

  1. key 为资源最小锁定值,缩小互斥范围
  2. value 为当前线程唯一 id,防止其他线程误删锁
  3. 使用 setnx 命令加锁,保证线程独占
  4. 设置锁失效时间,防止 down 机后锁无法释放

续锁

  1. 加锁成功后启动看门狗线程
  2. 每隔 ExpiredTime/3 时间,如果锁未释放则进行续约

删锁

  1. 将删锁代码放在 finally 代码块内,防止程序异常导致无法删锁
  2. 删锁时判断 value 是否为当前线程 id,防止误删其他线程的锁

优化

  1. 加锁、续锁、删锁都有多条 redis 命令,使用 lua 脚本保证执行的原子性
  2. 分布式锁并行化优化—-读写锁、分段锁
  3. 集群的情况下,锁有丢失风险,需要使用 RedLock
支付宝
微信
Simple is Awesome