分布式锁-Redis-简述

版权声明:本文为博主原创文章,未经博主允许不得转载;如有问题还请留言,随时沟通。 https://blog.csdn.net/MikeLC7/article/details/88817204

背景:

  • 分布式锁的背景(应用场景&需求&要解决的问题);
  • 带来的挑战;
  • 分布式的实现方式;(常见的三种);

分布式锁的要求:

功能要求
  1. 互斥;
    • 基本要求,即同一时间最多只能有一个客户端获取锁;
    • 也可以在互斥的前提现通过代码实现重入锁;
      • For_Redis:setNX;
  2. 容错;
    • 分布式锁所依赖的服务需要有容错性,保证服务的健壮性;
      • For_Redis:RedLock满足健壮性;
  3. Hard&Soft;
    • 提供Hard锁&Soft(可重试锁)多种功能模式;
      • For_Redis:code实现;
实现要求
  1. 原子性:加锁&解锁两种操作都需要是原子操作,避免系统性出现死锁;
    • None
      • For_Redis:所有操作依赖需要执行Lua脚本实现,满足操作的原子性;
  2. 权限复核:同一对加锁&解锁需要统一执行的客户端;
    • 方案A:通过设置ThreadLocal级别的Value,并在解锁时进行Check;
      • For_Redis:加锁时Set uuid to ThreadLocal,解锁时通过ThreadLocal Value + Lua 进行Check;

注意事项

  1. 超时时间的控制;
    • 锁假如有超时时间,则超时时间应该控制在方法可预期超时时间之上;
      • 避免调用方方法还未执行完成,锁已经超时释放,导致锁的实际意义不再存在;

猜你喜欢

转载自blog.csdn.net/MikeLC7/article/details/88817204