关于ServiceStack.Redis的一些问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ServiceStack.Redis的一些问题相关的知识,希望对你有一定的参考价值。
- 支持哪种代理?如果有的话,我该如何使用它?
- 是否支持#标签?或类似的东西?
- 除单元测试外,还有完整的用例吗? (即虽然我阅读了官方的GitHub文档,但我仍然不明白如何使用它。)
您正在链接到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