JAVA面试题:Redis分布式锁

Redis分布式锁

分布式锁使用的场景

集群情况下的定时任务,抢单,幂等性等场景

抢券场景

查询库存 -> 扣减库存

多个并发线程同时查询库存,出现超卖问题

添加互斥锁

所有线程执行操作之前必须尝试获取锁

保证一次只有一个线程能走查询库存->扣减库存的流程

Redis分布式锁实现原理

主要利用Redis的setnx(set if not exist)命令

redis 复制代码
set lock value nx ex 10
//获取锁
//设置过期时间防止获取锁时业务超时或服务宕机
redis 复制代码
del key
//释放锁

合理控制锁的有效时长

根据业务执行时间预估

加长锁的过期时间

给锁续期

使用redisson实现的分布式锁,基于setnx命令

watch dog

监控线程,监听持有锁的线程

加锁成功后每隔releaseTime/3的时间做一次续期

释放锁后通知watchdog

Redisson的获取锁方式

如果没有获取锁成功,会循环不断尝试获取锁直到超时

提高了分布式锁的可用性

Redisson实现的分布式锁--可重入

判断是否是同一个线程获取锁,如果是就可以成功获取

利用hash结构记录线程id和重入次数

key->线程名->重入次数

释放锁时会使锁的重入次数减一

Redisson实现分布式锁的主从一致性

RedLock:(实现繁琐,性能差)

在多个redis实例上创建锁(n/2+1)

n为redis节点数量

即超过redis实例的一半加锁

redis:AP思想:高可用性,最终一致

zookeeper:CP思想:强一致性

相关推荐
弹简特5 分钟前
【Java-阔怕的JVM】JVM
java·开发语言·jvm
2301_780669865 分钟前
UDP通信(一发一收,多发多收)、TCP通信(一发一收,多发多收、同时接收多个客户端的消息)、B/S架构的原理
java·tcp/ip·udp
小冷coding9 分钟前
工作流是什么呢?
java·面试
王莽v211 分钟前
FlashAttention 学习笔记:从公式到分布式
人工智能·分布式
像少年啦飞驰点、13 分钟前
零基础入门 Redis:从缓存原理到 Spring Boot 集成实战
java·spring boot·redis·缓存·编程入门
虾说羊15 分钟前
Springboot中配置欢迎页的方式
java·spring boot·后端
qq_124987075316 分钟前
基于Spring Boot的长春美食推荐管理系统的设计与实现(源码+论文+部署+安装)
java·前端·spring boot·后端·毕业设计·美食·计算机毕业设计
曲幽17 分钟前
FastAPI实战:Redis缓存与分布式锁的深度解析
redis·python·cache·fastapi·web·lock
王莽v223 分钟前
LLM 分布式推理:切分、通信与优化
人工智能·分布式
九皇叔叔33 分钟前
【02】SpringBoot3 MybatisPlus 加入日志功能
java·mysql·mybatis·日志·mybatisplus