首页 > 解决方案 > 关于 ServiceStack.Redis 的一些问题

问题描述

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

  2. 是否支持标签?或类似的东西?

  3. 除了单元测试,还有完整的用例吗?(即虽然看了GitHub官方文档,但还是不明白怎么用。)

官方 GitHub 文档

标签: c#redis

解决方案


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

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

首先,您需要设置 Redis Sentinel 配置。一种流行的设置是拥有1x Redis Master2x Redis replica slaves,此外,在每台运行 redis 实例的服务器上通常有一个单独的 redis sentinel 实例(用于监控正在运行的 redis 实例)。为了便于开发,您可以使用ServiceStack 的 redis-config项目,它可以轻松地在同一台服务器上运行1x master2x slave3x sentinel进程。

然后,当您运行 Redis 配置时(假设为 localhost),您可以使用 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 Sentinel 实例开始,因为RedisSentinel还可以发现同一"mymaster"组中的其他哨兵。

一旦您调用sentinel.Start()它将返回一个配置,该配置IRedisClientsManager维护一个打开的 Redis 客户端连接池,并侦听 Redis 的哨兵服务器实例以了解对 Redis 哨兵配置的任何更改,例如,以防 Redis 主服务器掉到正在运行的从服务器之一复制品。

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

container.Register<IRedisClientsManager>(redisManager);

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

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

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


推荐阅读