You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ServiceStack.Redis v5.14是否支持多分片Azure Redis部署?

问题解答

ServiceStack.Redis v5.14支持Azure Redis的多分片(Redis Cluster)实现,你遇到的MOVED错误是因为使用了不支持Cluster重定向的普通客户端导致的,下面是具体的解决方案和注意事项:

错误原因

MOVED是Redis Cluster的标准重定向响应,当你请求的Key不在当前连接的节点上时,Redis会返回该响应告知客户端需要连接到正确的分片节点。普通的RedisClient或PooledRedisClientManager不具备自动处理Cluster节点发现和重定向的能力,因此会抛出RedisResponseException。

正确的客户端使用方式

必须使用ServiceStack.Redis专门为Cluster设计的客户端类:

  • RedisClusterClient:单个Cluster客户端实例
  • RedisClusterManager:Cluster连接池管理器(适合高并发场景)

这些类会自动处理Cluster的节点发现、MOVED重定向以及节点故障转移,无需手动处理内部节点的IP和端口。

连接配置示例

你的连接字符串格式是正确的(指向Azure Redis实例DNS + 6380端口),只需替换客户端初始化逻辑即可:

单个客户端示例

var redisClusterConnStr = "your-azure-redis-name.redis.cache.windows.net:6380,password=your-access-key,ssl=true";
using var clusterClient = new RedisClusterClient(redisClusterConnStr);

// 执行Redis操作
clusterClient.Set("test-key", "test-value");
var value = clusterClient.Get<string>("test-key");

连接池管理器示例

var redisClusterConnStr = "your-azure-redis-name.redis.cache.windows.net:6380,password=your-access-key,ssl=true";
var clusterManager = new RedisClusterManager(redisClusterConnStr);

// 从连接池获取客户端
using var client = clusterManager.GetClient();
client.Set("pooled-test-key", "pooled-value");

关键注意事项

  • 无需指定Azure Redis内部分片的端口(如错误信息中的1500),Azure Redis Cluster对外仅暴露6380(SSL)端口,内部节点通信由Azure管理
  • 确保连接字符串包含ssl=true,Azure Redis强制要求SSL连接
  • 如果你之前使用的是非Cluster客户端(如PooledRedisClientManager),需要完全替换为Cluster专用的客户端/管理器,不能混用

内容的提问来源于stack exchange,提问作者Howard Hoffman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:06:14