c# - 关于 ServiceStack.Redis 的一些问题
解决方案
您正在链接到Configure Redis Sentinel Servers文档,因此我假设您想要配置您的 ServiceStack.Redis 实例以使用 Redis Sentinel 配置。
注意Redis Sentinel是 Redis 的高可用性解决方案(它不是代理),我建议阅读Redis 的官方 Redis Sentinel 文档以了解它的工作原理。
首先,您需要设置 Redis Sentinel 配置。一种流行的设置是拥有1x Redis Master和2x Redis replica slaves,此外,在每台运行 redis 实例的服务器上通常有一个单独的 redis sentinel 实例(用于监控正在运行的 redis 实例)。为了便于开发,您可以使用ServiceStack 的 redis-config项目,它可以轻松地在同一台服务器上运行1x master、2x slave和3x 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 连接将返回到内部连接池,等待下一次解决。
推荐阅读
- java - 如何验证我的 MAVEN_OPTS 环境变量是否正在传递给正在启动的 java 进程?
- android - 有没有办法对动画进行参数化?
- r - R sf:提取嵌套在 JSON 中的嵌套 geoJSON 特征
- wireless - Airodump没有将握手写入文件
- facebook - 通过 Facebook graph API 获取 Instagram 电子邮件
- r - 将数据下载到特定文件夹
- python - 创建的对象未使用更新的全局变量值
- android - 当我在两个单独的演示者中使用相同的 API 调用时如何实现 MVP
- openlayers-5 - OL5 如何通过单击内部区域而不仅仅是在线上来启用框/多边形选择?
- chart.js - 增加y轴和第一个x轴值之间的差距chart.js