wen0223

1、主流分布式锁实现方案

  • 基于数据库实现分布式锁

  • 基于缓存(redis 等)

  • 基于 Zookeeper

2、根据实现方式分类 :

  • 类 CAS 自旋式分布式锁:询问的方式,类似 java 并发编程中的线程获询问的方式尝试加锁,如 mysql、redis。
  • event 事件类型分布式锁: event 事件通知进程后续锁的变化,轮询向外的过程,如 zookeeper、etcd*

3、Redis 实现分布式锁流程

  • 设置过期时间,自动释放锁,为了解决业务异常而导致锁无法释放。(但是当业务运行超过过期时间时,开辟监控线程增加该业务的运行时间,直到运行结束,释放锁。)
  • 锁和过期时间一起设置保证两者原子性
  • uuid, 手动释放锁前获取锁的值,防止误删锁

4、实现伪代码

public void redisLock() throws InterruptedException {
  String uuid = UUID.randomUUID().toString();
  ValueOperations ops = redisTemplate.opsForValue();
  Boolean lock = ops.setIfAbsent("lock", uuid, 3000, TimeUnit.SECONDS);
  if (lock) {
    System.out.println("执行业务代码");
    if (uuid.equals(ops.get("lock"))) {
      redisTemplate.delete("lock");
    }
  } else {
    Thread.sleep(100);
    redisLock();
  }
}

分类:

redis

技术点:

相关文章:

  • 2021-05-31
  • 2022-12-23
猜你喜欢
  • 2021-09-01
  • 2022-02-02
  • 2021-10-15
  • 2021-08-29
  • 2021-07-09
相关资源
相似解决方案