关于ServiceStack.Redis的一些问题


  1. 支持哪个代理?如果有,我如何使用它?

  2. 是否支持主题标签?还是类似的东西?

  3. 除了单元测试,是否有任何完整的用例?(即虽然我阅读了 GitHub 的官方文档,但我仍然不明白如何使用它。

官方 GitHub 文档

您正在链接到配置 Redis Sentinel Servers 文档,因此我假设您要配置 ServiceStack.Redis 实例以使用 Redis Sentinel 配置。

注意 Redis Sentinel 是 Redis 的高可用性解决方案(它不是代理),我建议阅读 Redis 的官方 Redis Sentinel 文档以了解其工作原理。

首先,您需要设置 Redis Sentinel 配置。一个流行的设置是拥有1 个 Redis 主服务器2 个 Redis 副本从属服务器,此外,在运行 Redis 实例的每台服务器上都有一个单独的 redis 哨兵实例(用于监控正在运行的 redis 实例)是很常见的。为了便于开发,您可以使用ServiceStack的redis-config项目,该项目可以轻松地在同一台服务器上运行1x主进程,2x从进程3x哨兵进程。

然后,当您运行 Redis 配置(假设是本地主机)时,您可以使用 ServiceStack 的RedisSentinel类通过传入每个哨兵实例的 IP 和端口来连接到它,例如:

var sentinelHosts = new[]{ 
"127.0.0.1:26380", 
"127.0.0.1:26381", 
"127.0.0.1:26382", 
};
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");
IRedisClientsManager redisManager = sentinel.Start();

注意:您不必包含 Redis 主实例或 Redis 从实例的 IP 和端口,因为它们会被自动发现,甚至可以更改。您也可以从单个 Redis 哨兵实例开始,因为RedisSentinel还可以发现同一"mymaster"组中的其他哨兵。

调用sentinel.Start()后,它将返回一个已配置的IRedisClientsManager,该维护一个开放的 Redis 客户端连接池,并侦听 Redis 的哨兵服务器实例以了解对 Redis Sentinel 配置的任何更改,例如,如果 Redis 主服务器落入其中一个正在运行的从属副本。

您应该将redisManager维护为单例,并使用它来解析所需的所有 redis 客户端,例如,如果使用 IOC,则可以将其注册为单例:

container.Register<IRedisClientsManager>(redisManager);

每当您需要连接 Redis 时,都可以使用GetClient()解析与当前主实例的 redis 连接:

using (var redis = redisManager.GetClient())
{
}

use 语句的末尾(或调用.Dispose()时)打开的 Redis 连接将返回到内部连接池,等待下次解析

最新更新