讲师中心 微信公众号
AI工具推荐 视频效率加速

为什么Spring Boot高并发下Redis分布式锁会出现获取超时

落磊酱_4346

落磊酱_4346

发布时间:2026-09-04 13:22:19

|

388人浏览过

|

来源于php中文网

原创

Redis连接池耗尽导致获取锁超时最常见原因是连接池配置过小或连接泄漏,而非锁竞争本身;需检查max-active、设置合理max-wait、确保key粒度精细、启用Redisson看门狗续期,并排除网络与主从延迟影响。

为什么spring boot高并发下redis分布式锁会出现获取超时

Redis连接池耗尽导致获取锁超时

最常见原因不是锁逻辑本身,而是底层连接拿不到——lettucejedis 连接池被占满,tryLock() 在等待连接时就超时了。这和“锁竞争激烈”是两回事:即使只有一台服务在抢锁,连接池配置太小也会触发超时。

典型现象是日志里反复出现 Cannot get Jedis connectionLettuceConnectionException: Connection refused,但 Redis 服务器本身 CPU、内存、连接数都正常。

  • 检查 spring.redis.lettuce.pool.max-active(Lettuce)或 spring.redis.jedis.pool.max-active(Jedis),默认值常为 8,高并发下远远不够
  • 连接池大小建议按「QPS × 平均 Redis 调用次数 × 1.5」估算,例如每秒 200 次请求、每次业务平均调 3 次 Redis,至少预留 900 连接
  • 务必设置 max-wait(如 3000ms),避免线程无限阻塞;超时后应快速失败,而不是重试加重压力

锁 key 设计不合理引发隐式竞争

表面看是“获取锁超时”,实际是大量请求在抢同一把锁。比如所有订单共用 "order:lock",而不是 "order:lock:${orderId}",导致锁粒度粗、排队队列拉长,waitTime 很快耗尽。

这种问题在线上往往表现为:单个订单处理慢,拖垮整个订单队列;监控显示锁等待 P99 突增,但 Redis INFO commandstatscmdstat_set 并不高。

  • 锁 key 必须包含业务唯一标识(如订单 ID、用户 ID、商品 SKU),禁止硬编码固定字符串
  • 避免使用易碰撞的字段(如状态枚举值、时间戳),否则不同业务线可能意外共享一把锁
  • 若必须做全局锁(如配置刷新),需单独评估吞吐瓶颈,并配独立连接池隔离

Redisson 的 leaseTime 设置过短 + 无续期机制

当业务执行时间波动大(如依赖外部 HTTP 调用、数据库慢查询),而 leaseTime 又设成固定 10 秒,锁大概率在执行中途过期。后续请求因检测到 key 不存在而成功加锁,原线程还在跑——系统会拒绝重复加锁请求,表现为“获取锁超时”,实则是旧锁已失效、新锁正在排队。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载

Redisson 默认不自动续期,必须显式启用看门狗(watchdog)或手动调度 expire()。Spring Boot 3.2+ 配合 Redisson 3.25 后,RLock.lock() 才默认开启续期;但 tryLock(waitTime, leaseTime, unit) 仍不会续期。

  • 生产环境慎用 tryLock(...)leaseTime 的重载,改用无超时的 lock() + 自动续期
  • 若必须用 tryLockleaseTime 至少设为「P99 业务耗时 × 2」,并搭配 Lua 脚本释放锁(防止误删)
  • 确认 redisson.config.setLockWatchdogTimeout() 大于 30 秒(默认 30000ms),否则看门狗自身会停摆

网络延迟或 Redis 主从同步延迟放大超时感知

在跨机房部署或启用了 Redis 哨兵/集群的场景下,客户端连的是从节点(读写分离配置错误)、或主从同步 lag 较大(>200ms),会导致 SET NX EX 命令返回成功,但实际未真正落盘。后续请求在另一个从节点查不到 key,误判为可加锁,结果两个客户端都认为自己持锁——系统为防数据错乱,会在检测到冲突时强制拒绝后续获取,表现为“超时”。

这类问题难以复现,但压测时容易暴露:相同 QPS 下,同城双中心比单机房更频繁出现超时,且 redis-cli --latency 显示 p95 延迟突增。

  • 强制客户端只连主节点(RedisStandaloneConfiguration 或关闭哨兵的 readFrom 配置)
  • 禁用 readFrom = ReadFrom.SLAVE,避免读取未同步的从库状态
  • 在锁操作前后加 redis.ping() 探活,延迟超 100ms 时直接熔断,不走锁流程

真正卡住的从来不是代码逻辑,而是连接池水位、key 粒度、续期开关这三个开关没拧紧。只要其中一处松动,高并发下超时就会从偶发变成常态。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2111

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

397

2026.01.26

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

1873

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

2474

2023.10.07

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4009

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3515

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6212

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

583

2024.04.07

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn