一、连接模式
注意:说明:
注意:直连模式当前处于灰度测试阶段,仅 Redis 7.0 集群架构支持。如需使用,请通过工单系统提交申请。
二、实现介绍
·代理模式:实例对外提供统一的虚拟 IP 访问地址(VIP:Port)。客户端可直接使用标准 Redis 客户端(如 redis-cli、Jedis、Lettuce)进行连接,由内置的 Proxy 组件解析命令并按槽位路由至对应分片。Proxy 支持部分跨槽命令的聚合处理,且透明承载扩缩容、故障切换等拓扑变更,业务侧无需感知。
·直连模式:客户端通过统一的实例访问地址进行首次连接,随后直接与底层各个分片节点建立连接。客户端需使用支持 Redis Cluster 协议的智能客户端(Smart Client,如 Jedis Cluster、Lettuce Cluster、go-redis Cluster)。
·首次接入(First Time):客户端首先连接实例的统一访问地址(VIP:Port),通过 CLUSTER SLOTS 或 CLUSTER NODES 命令获取集群的完整拓扑结构,即各哈希槽区间与其所属分片独立访问地址(VIP 1、VIP 2…VIP N)的映射关系。
·直连数据分片:客户端在本地完成槽位映射计算后,直接与各个分片的物理 VIP 建立连接并动态路由请求,绕过 Proxy 代理层以获取更低的网络时延。当集群发生扩缩容或故障切换导致拓扑变更时,客户端通过后端返回的 MOVED 或 ASK 重定向指令,自动触发本地拓扑结构的动态更新与分片 VIP 的重新连接。
注意:说明:
注意:连接模式在新购实例时选择,实例创建后不支持切换。如需变更连接模式,建议通过新建实例 + 数据迁移方式实现。
三、功能差异
| 维度 | 直连模式(推荐) | 代理模式 |
| 访问路径 | 客户端 SDK 本地计算 Slot 后直达目标分片,链路无中间转发节点 | 客户端 → 代理层 → 分片,请求统一经 Proxy 解析路由后再转发 |
| 路由责任 | 客户端 SDK 负责,本地缓存 Slot 拓扑并按 MOVED/ASK 自适应刷新 | Proxy 负责,拓扑变更(扩缩容、故障切换)对客户端透明 |
| 客户端类型 | 需使用集群模式 SDK(如 Jedis Cluster、Lettuce Cluster、go-redis Cluster) | 标准单机客户端即可(如 redis-cli、Jedis、Lettuce) |
| 协议版本 | 同时支持 RESP2 与 RESP3,可使用客户端缓存等 RESP3 特性 | 当前仅支持 RESP2,不支持 RESP3 及其相关特性 |
| 连接收敛 | 客户端与各分片直接建连,分片连接数随客户端数量同步增长 | Proxy 汇聚海量客户端连接,用少量连接访问后端分片,降低分片连接压力 |
| 跨分片多 Key 命令 | 涉及的 Key 必须借助哈希标签归入同一 Slot,否则返回 CROSSSLOT 错误 | Proxy 自动按 Slot 拆分到各分片执行并聚合结果,业务无需关注 Slot 分布 |
| 客户端改造成本 | 较高,原基于单机客户端的业务需改造为集群 SDK 并适配路由逻辑 | 极低,可直接沿用现有单机客户端,平滑接入、运维透明 |
| 命令兼容性 | 命令语义与开源 Redis 保持高度一致。说明:为保障云上实例安全与稳定,部分系统管理类命令(如 CONFIG SET、DEBUG 等)受到限制,采取拦截或模拟(Mock)处理,不支持通过命令直接变更核心配置。 | 受代理层架构限制,部分管理类及多 Key 跨槽(Slot)命令受限。 |
四、命令兼容性
两种模式在命令行为上的差异主要集中在跨分片命令、管理类命令和遍历类命令三类。
注意:说明:
注意:阻塞类、事务、订阅、监控类命令会在分片上建立独占连接,使用不当可能耗尽分片连接配额。无论选择哪种模式,都建议控制这类命令的并发量并及时释放连接。
| 命令类别 | 代理模式行为 | 直连模式行为 |
| 跨分片多 Key(MGET/MSET/DEL 等) | 自动拆分聚合,可直接使用 | 必须同 Slot,否则 CROSSSLOT 错误 |
| SCAN / KEYS / DBSIZE | 由代理协调返回全集群结果 | 仅作用于单分片,全集群遍历需自行实现 |
| 事务 MULTI / EXEC / WATCH | 涉及的 Key 须在同一分片 | 涉及的 Key 须在同一 Slot |
| MOVED / ASK 重定向 | 代理内部处理,客户端无感 | SDK 自动处理,需配置重定向次数(建议3 – 5) |
| 阻塞命令(BLPOP 等)/ 订阅 / 监控 | 在分片上建立独占连接,需控制并发 | 行为同原生,同样消耗分片连接 |
五、连接示例
集群架构的两种连接模式均支持业界主流的多语言 Redis 客户端。下表列出各开发语言推荐的客户端及其在两种模式下使用的连接类,单击对应语言可跳转至详细连接示例。连接前的准备工作、认证方式与连接验证等通用说明,请参见 连接准备。
| 开发语言 | 推荐客户端 | 推荐版本 | 代理模式连接类 | 直连模式连接类 | 连接示例 |
| Java | Jedis | 5.1.2及以上 | JedisPool | JedisCluster | Java 连接示例 |
| Java | Lettuce | 6.3.0及以上 | RedisClient | RedisClusterClient | Java 连接示例 |
| Python | redis-py | 最新稳定版 | redis.Redis | RedisCluster | Python 连接示例 |
| Go | go-redis | v9 | redis.NewClient | redis.NewClusterClient | Go 连接示例 |
| Node.js | node-redis / ioredis | 最新稳定版 | createClient / new Redis() | createCluster / new Redis.Cluster() | Node.js 连接示例 |
| PHP | phpredis | 5.0及以上 | Redis | RedisCluster | PHP 连接示例 |
| C | hiredis | 最新稳定版 | redisConnect | redisClusterContext | C 连接示例 |
| .Net | StackExchange.Redis / ServiceStack.Redis | 最新稳定版 | ConnectionMultiplexer | ConnectionMultiplexer(Cluster) | .Net 连接示例 |
六、分片与副本配置
·分片数越多,容量和性能越高。所有分片均参与数据存储和请求处理。分片数 ≥ 1 时,数据自动按哈希槽分布,在水平方向扩展存储容量和吞吐性能。
·副本数越多,可用性越高。所有副本节点均参与高可用切换。副本数 ≥ 1 时,可开启读写分离功能,在垂直方向扩展读性能。具体信息,请参见 读写分离。
注意:说明:
注意:跨槽位的命令存在一定兼容性限制,详情请参见 命令参考概览。
| 配置项 | 可选规格 |
| 分片规格(GB) | 1、2、4、8、12、16、20、24、32、40、48、64 GB |
| 分片数量 | 1、3、5、8、12、16、24、32、40、48、64、80、96、128 |
| 副本数量 | 1、2、3、4、5 |
七、规格上限
| 规格项 | 上限 | 说明 |
| 总存储容量 | 8TB | 128分片 × 64GB/分片 |
| 并发性能 | 千万级 QPS | 腾讯云在标准测试环境下多次压测,取稳定值作为参考。具体信息,请参见 规格与性能。 |
八、在购买页配置
登录 腾讯云分布式缓存数据库购买页,在实例配置区域,配置集群架构的连接模式。
九、查看连接模式
登录 腾讯云分布式缓存数据库控制台,在实例列表中,找到目标实例,单击实例 ID,进入实例详情页面,在网络信息区域,可查看实例的连接模式。