关于ServiceStack.Redis的一些问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ServiceStack.Redis的一些问题相关的知识,希望对你有一定的参考价值。

  1. 支持哪种代理?如果有的话,我该如何使用它?
  2. 是否支持#标签?或类似的东西?
  3. 除单元测试外,还有完整的用例吗? (即虽然我阅读了官方的GitHub文档,但我仍然不明白如何使用它。)

Official GitHub Docs

答案

您正在链接到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 sentinel实例(用于监视正在运行的redis实例)。为了便于开发,可以使用ServiceStack's redis-config项目,这样可以在同一台服务器上轻松运行1x master,2x slave和3x sentinel进程。

然后,当您运行Redis配置时(假设为localhost),您可以通过传入每个Sentinel实例的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的Sentinel服务器实例,以便对Redis Sentinel配置进行任何更改,例如:在这种情况下,Redis主机会转移到其中一个正在运行的从属副本。

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

container.Register<IRedisClientsManager>(redisManager);

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

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

并且using语句的结束(或调用.Dispose()时)您的打开Redis连接将返回到内部连接池,等待下次解析时。

以上是关于关于ServiceStack.Redis的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

ServiceStack.Redis:配置为使请求和响应类/ dto是同一类?

ServiceStack.Redis:PooledRedisClientManager和RedisManagerPool等待上一请求完成

各种redis的介绍:ServiceStack.Redis,StackExchange.Redis,CSRedis

解决ServiceStack.Redis的6000次限制问题

Redis客户端ServiceStack.Redis的简单使用

哪个 Canoe 版本与链接中为 REDIS 客户端实现提供的 soln 兼容 https://github.com/ServiceStack/ServiceStack.Redis