我想实现以下高可用性设置:
现在,我知道ServiceStack.Redis提供了通过sentinels连接redis的api:
new RedisSentinel(sentinelHosts, masterName: "mymaster").Start().
我也熟悉ShardedRedisClientManager
计算哈希键并返回相应的连接池。
但是如何将它们组合在一起,以便我的输入将是一个标记列表(在init上)和一个用于请求实际数据的键?在哨兵模式中是否内置了对分片的支持?
答案 0 :(得分:2)
我会为将来的Google员工回答自己的问题。 我们在ServiceStack中仅发现了部分分片支持,并最终获得了以下代码:
new
ConsistentHash<RedisSentinelClientManagerWrapper>(clientManagers);
在应用程序启动时,我们初始化所有客户端管理器并创建 ConsistentHash的一个实例
当我们需要获取/设置一些内容时 Redis中的数据,我们在此从一致哈希中检索Redis客户端 方式:
var clientManager = consistentHash.GetTarget(key).ClientsManager;
var client = clientManager.GetClient();