ServiceStack.Redis - 在哨兵模式下支持分片吗?

时间:2018-04-30 19:44:15

标签: c# redis servicestack.redis

我想实现以下高可用性设置:

  • 2个主节点(充当客户端的一个逻辑数据集的分片) keyhashing)
  • 2个奴隶(每个主人一个)
  • 6个哨兵(每对主/从3对)

现在,我知道ServiceStack.Redis提供了通过sentinels连接redis的api:

new RedisSentinel(sentinelHosts, masterName: "mymaster").Start().

我也熟悉ShardedRedisClientManager计算哈希键并返回相应的连接池。

但是如何将它们组合在一起,以便我的输入将是一个标记列表(在init上)和一个用于请求实际数据的键?在哨兵模式中是否内置了对分片的支持?

1 个答案:

答案 0 :(得分:2)

我会为将来的Google员工回答自己的问题。 我们在ServiceStack中仅发现了部分分片支持,并最终获得了以下代码:

  1. new ConsistentHash<RedisSentinelClientManagerWrapper>(clientManagers);

    • 其中RedisSentinelClientManagerWrapper是我们自己的类,其中包含 哨兵客户经理的实例并实现GetHashCode()
    • clientManagers是所有这些列表 前哨经理包装器(根据要求,我们只有2个)。
  2. 在应用程序启动时,我们初始化所有客户端管理器并创建 ConsistentHash的一个实例

  3. 当我们需要获取/设置一些内容时 Redis中的数据,我们在此从一致哈希中检索Redis客户端 方式:

       var clientManager = consistentHash.GetTarget(key).ClientsManager;
       var client = clientManager.GetClient();