Java 面试:Redis — 分布式锁篇(黑马程序员视频笔记)

新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)

Redis 分布式锁

Redis 实现分布式锁主要利用 Redis 的 setnx 命令。setnx 是 SET IF NOT EXISTS(如果不存在则 SET) 的简写。
在这里插入图片描述

Redis 实现分布式锁合理控制锁时长的方法
  • 根据业务时间进行预估:不靠谱
  • 给锁续期:推荐
Redis 实现分布式锁 - 执行流程

while 循环有时间限制
在这里插入图片描述
代码实现
在这里插入图片描述

Redis 实现分布式锁 - 可重入

在这里插入图片描述

Redis 实现分布式锁 - 主从一致性

在对主节点写入时,主节点突然宕机,于是选取一个从节点为主节点,这时候数据并没有同步到从节点,于是另一个请求去获取锁时可以获取成功,导致两个线程同时持有一把锁
在这里插入图片描述

红锁

不能只在一个 Redis 实例上创建锁,应该是在多个 Redis 实例上创建锁 (n / 2 + 1),避免在一个 Redis 实例上加锁。实际场景中很少使用红锁,主要有以下三个原因。

  • 实现复杂
  • 性能差
  • 运维繁琐
    Redis 是 AP 思想,只保证最终一致性,若想保证强一致性,建议使用 Zookeeper(CP 思想)。
    在这里插入图片描述

面试回答

在这里插入图片描述
去尝试加锁,此时操作的是刚刚提升上来的 slave 节点,因为数据还没有及时同步,因此线程 2 也可以成功加锁,就导致有两把锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值