有关ServiceStack.Redis的一些问题

时间:2018-07-30 06:19:12

标签: c# redis

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

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

  3. 除单元测试外,是否有完整的用例? (即,尽管我阅读了GitHub的官方文档,但我仍然不知道如何使用它。)

Official GitHub Docs

1 个答案:

答案 0 :(得分:2)

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

注意Redis Sentinel是Redis的高可用性解决方案(它不是代理),我建议阅读Redis's official Redis Sentinel docs来了解其工作原理。

首先,您需要设置Redis Sentinel配置。一种流行的设置是在每个主机上都有 1x Redis Master 2x Redis副本从机,此外,通常在每个主机上都有一个单独的redis哨兵实例(用于监视正在运行的redis实例)运行Redis实例的服务器。要使其易于开发,您可以使用ServiceStack's redis-config项目,该项目使运行 1x主机 2x奴隶 3x哨兵变得容易>在同一服务器上的进程。

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

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 Sentinel实例开始,因为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())
{
}

using语句的结尾(或在调用.Dispose()时),打开的Redis连接将返回到内部连接池,等待下一次解决。