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
聚焦模式
字号
最后更新时间: 2025-12-23 17:02:48
标准版包括用户自建的单机、主从模式以及腾讯云数据库 Redis® 内存版(标准架构),本文为您介绍标准版 Redis 迁移至腾讯云数据库 Redis® 内存版(集群架构)的兼容性相关内容。

兼容性说明

腾讯云数据库 Redis® 内存版(集群架构)采用自研 Proxy 加社区集群版的架构,100%兼容社区 Redis Cluster 的命令。

标准版迁移至内存版(集群架构)面临的最大问题为命令是否兼容内存版(集群架构)的使用规范,内存版(集群架构)使用规范主要注意事项如下:

多 Key 操作

Redis 内存版(集群架构)通过 HASH 算法将 Key 分布至16384个 SLOT,原理可参考 Redis Cluster 文档
社区 Redis Cluster:不支持任何跨 SLOT 的多 Key 访问命令。
腾讯云数据库 Redis® 内存版(集群架构):支持 MGET、MSET、DEL 命令的跨 SLOT 多 Key 访问,主要原理是通过腾讯云自研 Proxy 实现多个节点的命令聚合运算。
Hash Tag:业务可以通过 Hash Tag 的方式,将需要进行多 Key 运算的 Key 聚合至相同 SLOT,Hash Tag 的使用方式请参考 Redis Cluster 文档
跨 SLOT 命令列表:
命令族
命令
内存版(集群架构)跨 Slot 支持
keys 族
del
exists
rename
x
renamenx
x
unlink
x
list 族
rpoplpush
x
blpop
x
brpop
x
brpoplpush
x
sets 族
sdiff
x
sdiffstore
x
sinter
x
sinterstore
x
smove
x
sunion
x
sunionstore
x
sorted sets 族
zinterstore
x
zunionstore
x
strings 族
bitop
x
mget
mset
msetnx
x
hyperloglog 族
pfcount
x
pfmerge
x
scripting 族
eval
x
evalsha
x
script exists
x
Stream 族
xread
x
xreadgroup
x

LUA 支持

内存版(集群架构)支持 LUA 命令,但 LUA 脚本中访问的 Key 不能跨 SLOT。
EVAL、EVALSHA 命令必须要传 Key 参数,否则命令将无法执行。
SCRIPT 的子命令 LOAD、FLUSH、KILL、EXIST 会通过 Proxy 分发至集群中所有的主节点。
> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"
说明:
LUA 使用时必须传参数 key1、key2。

事务支持

内存版(集群架构)支持事务,但是事务中的命令不能跨 SLOT 访问 Key。
当前线上版本需要先执行 watch key 命令,再执行 multi、exec,后续版本会进行优化,免除先执行 watch key 的动作。

自定义命令

Redis 内存版(集群架构)通过 VIP 封装,在集群模式下提供了标准版的使用体验,对业务的使用带来很大便利,但是对运维不够透明,因此通过自定义命令来弥补这些空缺,支持集群中每个节点的访问,支持方式为在原有命令的参数列表最右边新增一个参数“节点ID”,COMMAND arg1 arg2 ... [节点ID],节点 ID 可通过 cluster nodes 命令,或者在 控制台 中获取。
10.1.1.1:2000> cluster nodes25b21f1836026bd49c52b2d10e09fbf8c6aa1fdc 10.0.0.15:6379@11896 slave 36034e645951464098f40d339386e9d51a9d7e77 0 1531471918205 1 connectedda6041781b5d7fe21404811d430cdffea2bf84de 10.0.0.15:6379@11170 master - 0 1531471916000 2 connected 10923-1638336034e645951464098f40d339386e9d51a9d7e77 10.0.0.15:6379@11541 myself,master - 0 1531471915000 1 connected 0-546053f552fd8e43112ae68b10dada69d3af77c33649 10.0.0.15:6379@11681 slave da6041781b5d7fe21404811d430cdffea2bf84de 0 1531471917204 3 connected18090a0e57cf359f9f8c8c516aa62a811c0f0f0a 10.0.0.15:6379@11428 slave ef3cf5e20e1a7cf5f9cc259ed488c82c4aa17171 0 1531471917000 2 connectedef3cf5e20e1a7cf5f9cc259ed488c82c4aa17171 10.0.0.15:6379@11324 master - 0 1531471916204 0 connected 5461-10922

原生命令:info server
自定义命令:
info server ef3cf5e20e1a7cf5f9cc259ed488c82c4aa17171SCAN
命令示例:
scan 0 238b45926a528c85f40ae89d6779c802eaa394a2
scan 0 match a* 238b45926a528c85f40ae89d6779c802eaa394a2KEYS
命令示例:
keys a* 238b45926a528c85f40ae89d6779c802eaa394a2

客户端接入方式

建议用户使用标准版(例如 jedis,非 jedis cluster)的客户端访问云数据库 Redis® 内存版(集群架构),这种方式接入效率更高,使用简单,同时也支持 cluster 客户端的接入,例如使用 jedis cluster。

Codis 兼容性

腾讯云数据库 Redis® 内存版(集群架构)100%兼容 Codis-server 命令,业务无需更改,通过 DTS 服务即可快速迁移数据至云数据 Redis。相对于 Codis 有如下优势:
兼容版本更多,Codis 已停留在3.2版本,云数据库 Redis® 内存版(集群架构)现在已支持4.0、5.0版本,且后续将持续跟进社区版本更新。
兼容命令更多,Codis 不支持阻塞命令的执行,如 BLPOP、SUBSCRIBE 等命令。
Codis 的数据迁移遇到大 Key 情况,可能会导致服务不可用,而云数据库 Redis® 支持无损扩展,无惧大 Key。

兼容性检查

目前没有工具可以100%确认从标准迁移到集群是否存在兼容性问题,下文提供的2个工具可用来辅助评估兼容性,从标准迁移到集群时,建议在迁移之前做好静态评估、动态评估、业务验证3个方面的验证工作,保证迁移工作顺利进行。

静态评估

1. 下载 cluster_migrate_online_check.py 静态工具,通过该工具执行 info commandstats 命令,分析标准版是否执行过跨 SLOT 相关命令,来辅助判断是否可能存在兼容性问题。
Usage:
./cluster_migrate_check.py host port password
说明:
host、port、password 输入标准版 Redis 的信息。
2. 参考上文的 兼容性说明,业务侧逐一评估每一项是否可通过。

动态评估

下载 cluster_migrate_online_check 动态验证工具,通过该工具模拟客户端执行 psync 命令,从标准版实时同步增量数据至云数据库 Redis® 内存版(集群架构),通过实时同步,可以确认写入命令是否存在兼容性问题。该工具无法覆盖读命令是否兼容的测试。
说明:
云数据库 Redis® 的 psync 命令需要 提交工单 进行申请。
云数据库 Redis® 的代理版本需要大于等于5.6.5,以便能够兼容 Redis 的 config set 命令,小于5.6.5的版本需要先对代理进行升级。
动态验证步骤如下:
1. 控制台 开通云数据库 Redis® 内存版(集群架构)。
2. 通过工具从标准版实时同步数据至云数据库 Redis® 内存版(集群架构)。
3. 经过一段时间的验证(如6小时或者24小时),如果工具没有报错说明写入命令没有兼容性问题,如果有报错可根据报错信息得到不兼容的命令信息。
Usage:
./cluster_migrate_online_check srcip:srcport srcpasswd dstip:dstport dstpasswd
环境变量参数:
export logout=1 //打印命令到控制台,默认关闭
export pipeline = 2000 //pipeline 并发数量,默认1000
说明:
srcip:srcport:必填,输入标准版 Redis 的地址信息。
dstip:dstport:可选,输入云数据库 Redis® 内存版(集群架构)的地址信息,不填目标信息时可将该工具当 monitor 使用。
4. 参考上文的 兼容性说明,业务侧逐一评估每一项是否可通过。

业务验证

为确保顺利进行迁移,建议用户在测试环境进行业务测试验证,通过将测试环境的业务连接至云数据库 Redis® 内存版(集群架构),来确认每个功能无误后再进行迁移。

自建实例迁移失败处理

client-output-buffer-limit 参数配置过小,建议该参数配置到512MB或1024MB,配置命令如下:
config set client-output-buffer-limit "slave 1073741824 1073741824 600"
EVAL 命令未传参数。

帮助和支持

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

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

文档反馈