Proxy 架构与直连模式的使用差异

最近更新时间: 2026-03-13 09:03:00

**命令****Redis 5.0****Redis 6.2****自建直连模式****建议**
del集群版支持跨 Slot/跨节点命令操作,由 Proxy 层自动完成 Key 分发与结果聚合。
跨 Slot 和跨节点都不支持
正常使用
unlink正常使用
exists正常使用
mset正常使用
mget正常使用
<strong>注意:</strong>
Proxy 针对命令 mget 的检验返回不符合预期将报错。`-ERR invalid return data`。
zunionstore由于跨 Slot 操作需 Proxy 额外处理命令分发与结果聚合,建议遵循 Redis 社区规范,确保关联 Key 位于同一 Slot 以提升性能。
randomkey集群版 randomkey 命令随机转发到后端不同节点。只在当前连接的节点执行建议仅在明确需要当前分片随机 Key 时使用,否则应改用 SCAN 或其他替代方案。
keys
  • 集群版 keys 命令默认并行在所有 Master 节点执行,由 Proxy 层聚合各分片结果后统一返回客户端。
  • 集群版支持通过`keys [@shard_id]`语法指定分片执行,此时仅透传目标分片的执行结果,不进行跨节点聚合。
  • 标准版 keys 命令直接透传到唯一 Master 节点执行,无分片聚合过程,响应行为与原生 Redis 一致。
只在当前连接的节点执行请根据业务需求选择 keys 命令执行方式:指定分片执行(返回单分片数据)或全分片执行(返回聚合数据)。执行方式分别如下:
  • KEYS {hash_tag}pattern
  • KEYS pattern NODEID
scan
  • 集群版 scan 命令默认轮询所有 Master 节点。
  • 标准版 scan 命令直接透传到 Master 节点。
  • 集群版/标准版均支持指定后端节点执行(如`SCAN 0 @shard2`)。
只在当前连接的节点执行请根据业务选择 scan 命令执行方式:指定分片执行(返回单分片数据)或全分片执行(返回聚合数据)。执行方式分别如下:
  • SCAN cursor [MATCH {hash_tag}pattern] [COUNT count]
  • SCAN cursor [MATCH pattern] [COUNT count] NODEID
dbsize
  • 集群版 dbsize 命令默认在所有 Master 节点执行,由 Proxy 层聚合各分片结果后统一返回客户端。
  • 集群版支持通过`dbsize [@shard_id]`语法指定分片执行,此时仅透传目标分片的执行结果,不进行跨节点聚合。
  • 标准版 dbsize 命令直接透传到唯一 Master 节点执行,无分片聚合过程,响应行为与原生 Redis 一致。
只在当前连接的节点执行请根据业务需求选择 dbsize 命令执行方式:指定分片执行(返回单分片数据)或全分片执行(返回聚合数据)。执行方式分别如下:
  • DBSIZE
  • DBSIZE NODEID
flushdb
  • 集群版 flushdb 命令默认在所有 Master 节点执行,由 Proxy 层聚合各分片结果后统一返回客户端。
  • 集群版支持通过`flushdb [@shard_id]`语法指定分片执行,此时仅透传目标分片的执行结果,不进行跨节点聚合。
  • 6.2与7.0版本支持 ASYNC、SYNC 选项,默认为ASYNC。
只在当前连接的节点执行请根据业务需求选择 flushdb 命令执行方式:指定分片执行(返回单分片数据)或全分片执行(返回聚合数据)。命令使用如下:
  • FLUSHDB
  • FLUSHDB SYNC
  • FLUSHDB ASYNC
  • FLUSHDB SYNC NODEID
  • FLUSHDB ASYNC NODEID
flushall
  • 集群版 flushall 命令默认在所有 Master 节点执行,由 Proxy 层聚合各分片结果后统一返回客户端。
  • 集群版支持通过`flushall [@shard_id]`语法指定分片执行,此时仅透传目标分片的执行结果,不进行跨节点聚合。
  • 6.2与7.0版本支持 ASYNC、SYNC 选项,默认为ASYNC。
只在当前连接的节点执行请根据业务需求选择 flushall 命令执行方式:指定分片执行(返回单分片数据)或全分片执行(返回聚合数据)。命令使用如下:
  • FLUSHALL
  • FLUSHALL SYNC
  • FLUSHALL ASYNC
  • FLUSHALL SYNC NODEID
  • FLUSHALL ASYNC NODEID
subscribe
  • 集群版命令默认转发至所有 Master 节点执行。
  • 标准版此命令默认转发至 Master 节点。
只在当前连接的节点执行正常使用
unsubscribe正常使用
psubscribe正常使用
punsubscribe正常使用
publish
  • 集群版 publish 命令根据 channel 名称计算的 slot 值路由到对应的 Master 节点进行广播。
  • 标准版 publish 命令默认转发 Master 节点。
只在当前连接的节点执行正常使用
pubsub
  • 支持 CHANNELS、NUMPAT、NUMSUB 选项。
  • 集群版 pubsub 命令默认随机转发到后端不同 Master 节点,并且返回结果相同。
  • 标准版 pubsub命令默认转发至 Master。
只在当前连接的节点执行,不同节点返回不同的结果Redis 集群版对 PUBSUB 命令进行了增强,所有节点均返回全局一致的频道列表,与开源版的不同节点返回不一致存在差异,建议业务代码避免依赖分片局部状态,需按全集群维度处理订阅逻辑。
cluster
  • 集群版支持 cluster keyslot、cluster slots、cluster nodes、cluster info、cluster countkeysinslot、cluster keyslot、cluster getkeysinslot 命令。
  • 集群版 cluster slots、cluster nodes、cluster info 命令默认随机转发到后端节点。
  • 集群版 cluster info 命令额外支持指定后端节点执行。
  • 集群版 cluster keyslot、cluster countkeysinslot、cluster keyslot、cluster getkeysinslot 命令默认根据指定的 slot 转发到相应节点。
  • 集群版 cluster slots、cluster nodes 等命令将屏蔽、转换部分敏感信息。
只在当前连接的节点执行请根据业务场景评估 cluster 命令的转发模式。
asking集群版/标准版无实际行为。执行后有重定向效果Proxy 会处理 ask 错误,用户无需关注。
function--只在当前连接的节点执行建议评估云上架构是否与实际业务场景存在差异,如果存在差异则需要修改代码。
script
  • 集群版与标准版均不支持 script debug 命令。
  • 集群版 script exists、script flush、script kill、script load 命令默认会在所有 Master 节点上同步执行,并确保各节点返回一致的结果后才响应客户端。
  • 标准版 script 命令默认转发至 Master 节点。
只在当前连接的节点执行请检查现有代码逻辑是否与云平台默认全节点执行的逻辑存在差异,如存在不一致需按云上规范进行改造。
multi
exec
discard
  • 事务或 watch 锁定的后端节点由 首个操作的键的哈希槽决定(watch 优先于 multi 后的首条命令),确保事务或监听操作在单节点内原子执行。
  • 标准版默认转发至 Master 节点。
只在当前连接的节点执行建议评估事务以及 watch 命令使用是否与上云前存在差异。
watch执行 watch 后,连接即被锁定到所监听 key 所在的节点,后续所有命令均通过该连接转发。只在当前连接的节点执行建议 watch 和 unwatch 命令之间的 key 操作在同一个 slot 上。
expireat-只在当前连接的节点执行,并支持 [NX \| XX \| GT \| LT] 选项请评估业务是否需要使用 [NX \| XX \| GT \| LT] 选项。
pexpire-
pexpireat-
client
  • 集群版与标准版均在 Proxy 层完全兼容 client list、client setname、client getname、client id、client kill、client unblock 命令。
  • client list 的实现依赖一条专用订阅连接:每个 Proxy 都与负责0号 slot 的 master 保持该连接,用于实时汇聚所有 Proxy 的会话信息。
  • client list 的输出仅包含 id、addr、fd、name、cmd、age、idle、proxy 字段,且 id 始终为负数,格式与开源版本不同。
  • client kill 可直接终止其他 Proxy 上的会话。
只在当前连接的节点执行,并返回相应 redis 版本的 client list 信息请自查业务是否依赖 client 命令;如非必需,请避免执行 client list,以免慢查询和节点内存暴涨。
monitormonitor 命令只会监控当前连接到的 Proxy 上执行的命令只在当前连接的节点执行使用该命令请明确监控目标是单个 Proxy 还是后端某个分片的指标。
imonitor
  • 集群版 imonitor 命令支持指定后端节点上执行的命令。
  • 标准版 imonitor 命令只转发到 Master 节点。
无此命令使用如下:
  • 集群版:IMONITOR NODEID
  • 标准版:IMONITOR
time
  • 集群版 time 命令默认随机转发到后端不同节点。
  • 标准版 time 命令默认转发至 Master 节点。
只在当前连接的节点执行请评估业务是否依赖 time 命令。
wait
  • 集群版 wait 命令转发依据上一次写命令转发的后端 Master 节点进行转发。
  • 标准版 wait 命令默认转发至 Master 节点。
只在当前连接的节点执行请评估云上 Proxy 转发逻辑与业务代码中的差异。
command
  • 集群版 command 命令默认随机转发到后端不同节点
  • 标准版 command 命令转发至默认 Master 节点。
只在当前连接的节点执行正常使用
lolwut
  • 集群版 lolwut 命令默认随机转发到后端不同节点。
  • 标准版 lolwut 命令默认转发至 Master 节点。
只在当前连接的节点执行正常使用
echo
  • 集群版 echo 命令默认随机转发到后端不同 Master 节点。
  • 标准版默认转发到 Master 节点。
只在当前连接的节点执行正常使用
info
  • 集群版 info 命令默认随机转发至后端 Master 节点执行。
  • 标准版 info 命令默认转发至 Master 节点。
  • info 命令额外支持指定后端节点进行转发。
  • info 命令针对返回信息会进行敏感信息屏蔽、转换。
只在当前连接的节点执行info 命令使用如下:
  • INFO
  • INFO NODEID
ping
  • 集群版 ping 命令默认随机转发到后端任一 Master 节点。
  • 集群版 ping 命令额外支持指定后端节点执行。
  • 集群版与标准版均支持 ping 不转发到后端节点,由Proxy 直接回包。
只在当前连接的节点执行请评估 ping 命令是否需要透传至后端分片,命令使用如下:
  • PING
  • PING NODEID
hello-
  • 集群版与标准版 hello 命令目前仅支持 hello 2,并且需要用户执行 Auth 后才能正常执行。
  • Proxy 目前不支持 resp3 协议,执行 hello 3将会报错,请将客户框架转换为 resp2 的 auth 命令进行认证。
只在当前连接的节点执行请评估业务框架是否存在使用`HELLO 3 auth username password`形式进行认证;是否使用 resp3 协议,需要降级为 resp2 协议。
config
  • 集群版与标准版 config set 命令被 Proxy 拦截,立即返回“成功”响应,命令不会真正生效。
  • 集群版 config get 命令默认随机访问任一后端节点。
  • 标准版默认访问 Master 节点。
只在当前连接的节点执行建议通过控制台查看或者修改配置。具体信息,请参见 参数配置
slowlog
  • 集群版 slowlog 命令默认执行必须指定后端节点,否则报错
  • 标准版 slowlog 命令默认转发至 Master 节点。
只在当前连接的节点执行建议通过控制台查看完整的慢查信息。
memory集群版不支持 memory 命令。只在当前连接的节点执行建议通过控制台查看实例的内存分析(大 Key 分析)。
readonly集群版 readonly 命令将在 Proxy 上执行并返回,实际不生效。只在当前连接的节点执行并生效建议通过控制台开启副本只读功能。具体操作,请参见 副本只读
debugdebug 命令仅支持 object 子命令。debug 命令全部子命令支持请业务评估是否使用其他子命令,如有则需要进行代码修改。
sentinel集群版与标准版均兼容 SENTINEL sentinels、SENTINEL get-master-addr-by-name、SENTINEL slaves,不透传到后端。集群模式不支持哨兵模式
  • 集群模式,可忽略此命令。
  • 哨兵模式,请评估当前云上 Redis 支持的 sentinel 命令是否满足业务需求。
role
  • 集群版 role 命令默认随机转发至后端任一节点。
  • 标准版默认转发至 Master 节点。
只在当前连接的节点执行建议用户不使用。
lastsave
  • 集群版默认随机转发到后端不同 Master 节点。
  • 标准版默认转发到 Master 节点。
只在当前连接的节点执行建议用户不使用。
latency
  • 集群版不支持。
  • 标准版转发至默认 Master 节点。
只在当前连接的节点执行建议用户不使用。
readwrite集群版不支持 readwrite 命令。只在当前连接的节点执行建议用户不使用。
pfselftest集群版不支持 pfselftest 命令只在当前连接的节点执行建议用户不使用。
post集群版不支持 post 命令只在当前连接的节点执行建议用户不使用。
host集群版不支持 host 命令只在当前连接的节点执行建议用户不使用。