1 分布式锁概述

LocksynchronizedMutex
for update

每种方式实现的分布式锁各有优缺点简单介绍一下:

A

2 分布式锁要点

实现分布式锁需要满足一下几点:

  • 锁载体:redis 受用 K-V 键值作为锁载体,ZK使用临时节点作为载体
  • 锁租期:进程持有分布式锁后不能一直占用,如果因为宕机情况造成锁释放失败,就会一直占用,reds 可以设置过期时间,zk临时节点也会自动删除。
  • 其他要求:比如减少惊群效应、可重入机制、公平锁机制,不同的实现方式有的不能完全满足。

分布式锁选择:

  • qps不大的情况下,那种方式都可以
  • 结合目前技术体系,在不引入新的技术中间件情况下解决问题
  • qps并发极高,但容忍极少的数据丢失或者不一致,建议使用redis实现分布式锁
  • 如果业务要求任何情况下都不允许数据丢失,可以使用zk或者etcd实现

3 Etcd 实现机制

leaseKeepAliveRevision

4 代码实现

操作步骤:

  • 初始化客户端
  • 创建一个session并设置默认租期30s
  • 获取指定前缀的锁对象
  • 加锁
  • 执行业务
  • 释放锁

代码:

测试结果