tencent cloud

腾讯云分布式缓存数据库(兼容 Redis)

动态与公告
产品动态
公告
新手指引
产品简介
产品概述
产品优势
应用场景
存储引擎
产品系列
产品版本
规格与性能
读写分离
多可用区部署
地域和可用区
名词解释
购买指南
计费概述
定价中心
购买实例
续费说明(包年包月)
退费说明(包年包月)
欠费说明
按量转包年包月
快速入门
快速创建实例
连接 Redis 实例
操作指南
操作总览
连接数据库实例
管理实例
升级实例
管理节点(Redis/ValKey 版)
管理多可用区
备份与恢复
账号管理
参数配置
慢查询
访问管理
网络与安全
监控与告警
事件管理(Redis/ValKey 版)
数据迁移
Redis 版全球复制
数据库审计
诊断优化
Sentinel 模式
开发准则
命名规则
基本使用准则
Key 与 Value 设计原则
命令使用准则
客户端程序设计准则
连接池配置
命令参考
命令参考概览
Redis 版与 Valkey 版命令兼容性
大版本命令使用差异
Proxy 架构与直连模式的使用差异
命令更多操作(Redis/Valkey 版)
Memcached 版命令兼容性
实践教程
基于 Spring Boot 搭建 Redis 客户端监控
Redis 客户端连接配置策略与实践
集群架构全局 SCAN 使用指南
实例安全下线
热 Key 与 大 key
可用区迁移方案
故障处理
连接异常
Redisson 客户端超时重连异常分析及解决方案
性能排查与调优
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Parameter Management APIs
Other APIs
Backup and Restoration APIs
Region APIs
Monitoring and Management APIs
Log APIs
Data Types
Error Codes
常见问题
使用常见问题
连接登录问题
购买相关问题
相关协议
服务等级协议
Terms of Service
词汇表
联系我们

版本推荐

PDF
聚焦模式
字号
最后更新时间: 2026-03-17 18:23:48
Lettuce 是一个高性能、异步非阻塞的 Redis Java 客户端,支持 Redis 的多种数据结构和命令,能够显著提升 Redis 操作的性能和响应速度,特别适合在高并发场景下使用。
说明:
腾讯云通过 VPC IP 代理层统一屏蔽了 Redis 底层架构的复杂性(分片/高可用)。客户端访问腾讯云 Redis 实例时,无需配置集群或哨兵模式,而是像连接单节点 Redis 一样,直接访问腾讯云提供的统一入口(VPC IP)。

Lettuce 客户端设计缺陷

从 Spring Boot 2.x 开始,Lettuce 取代 Jedis 成为默认的 Redis 客户端。Lettuce 的默认配置在标准 Redis 部署中可行,但与腾讯云 VIP 的透明高可用架构存在兼容性鸿沟。必须通过强制启用 keepAlive 和 tcpUserTimeout 参数,使客户端连接池能及时响应后端切换,否则将导致故障转移后客户端持续不可用。具体信息,如下表所示。
故障类型
业务场景
Lettuce 版本
核心问题
主动切换
兼容版本升级、代理版本升级、数据迁移
Lettuce 6.1.05之前版本
默认不启用 TCP Keepalive(探测空闲连接是否存活),导致客户端连接池无法感知后端 VIP 的切换。旧连接仍被保留在池中,即使服务端已完成切换,客户端仍会持续使用无效连接抛出错误。
被动切换
物理机异常宕机
Lettuce 6.3.0之前版本
未配置 TCP_USER_TIMEOUT 参数,当网络闪断或节点宕机时,操作系统可能长时间(默认 ≥30 分钟)保持半开连接。客户端连接池无法及时回收这些"僵尸连接",造成持续报错。

推荐版本

Lettuce 6.3.0版本,单机连接模式,解决了主动切换和被动切换连接池不能及时响应后端切换的问题,配置 keepAlive 和 tcpUserTimeout 参数如下所示。
SocketOptions socketOptions = SocketOptions.builder()
.keepAlive(SocketOptions.KeepAliveOptions.builder()
// 两次 keepalive 间的时间间隔
.idle(Duration.ofSeconds(TCP_KEEPALIVE_TIME))
// 连接空闲多久开始 keepalive
.interval(Duration.ofSeconds(TCP_KEEPALIVE_TIME/3))
// keepalive 几次之后断开连接
.count(3)
// 是否开启保活连接
.enable()
.build())
.tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder()
// 解决服务端rst导致的长时间超时问题
.tcpUserTimeout(Duration.ofSeconds(TCP_USER_TIMEOUT))
.enable()
.build())
// tcp 连接超时设置
.connectTimeout(Duration.ofMillis(redisConnectTimeout))
.build();

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈