分布式锁-Redis-简述

背景:

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

分布式锁的要求:

功能要求

  • 互斥;
    • 基本要求,即同一时间最多只能有一个客户端获取锁;
    • 也可以在互斥的前提现通过代码实现重入锁;
      • For_Redis:setNX;
  • 容错;
    • 分布式锁所依赖的服务需要有容错性,保证服务的健壮性;
      • For_Redis:RedLock满足健壮性;
  • Hard&Soft;
    • 提供Hard锁&Soft(可重试锁)多种功能模式;
      • For_Redis:code实现;

实现要求

  • 原子性:加锁&解锁两种操作都需要是原子操作,避免系统性出现死锁;
    • None
      • For_Redis:所有操作依赖需要执行Lua脚本实现,满足操作的原子性;
  • 权限复核:同一对加锁&解锁需要统一执行的客户端;
    • 方案A:通过设置ThreadLocal级别的Value,并在解锁时进行Check;
      • For_Redis:加锁时Set uuid to ThreadLocal,解锁时通过ThreadLocal Value + Lua 进行Check;

注意事项

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值