Redis ServiceStack Native Client Instantiation指定连接设置

时间:2015-05-11 23:50:21

标签: c# redis stackexchange.redis

我在使用ServiceStack Redis客户端时遇到了一些问题。 现在,我能够创建一个指定主机名和端口的客户端,但是密码或多个服务器呢。我是这样做的:

protected IRedisNativeClient GetRedisClient()
    {
        if (_RedisHostName == null)
        {
            _RedisHostName = ConfigurationManager.AppSettings.Get(REDIS_HOST_SETTING_KEY);
            _RedisPort = Int32.Parse(ConfigurationManager.AppSettings.Get(REDIS_PORT_SETTING_KEY));
        }
        return RedisClientFactory.Instance.CreateRedisClient(_RedisHostName, _RedisPort);
    }

我见过人们使用PooledRedisClientManager并传递连接字符串的示例,但我有权访问的重载不接受字符串(v2.2.0.20691)。例如:

    public PooledRedisClientManager();
    public PooledRedisClientManager(params string[] readWriteHosts);
    public PooledRedisClientManager(IEnumerable<string> readWriteHosts, IEnumerable<string> readOnlyHosts);
    public PooledRedisClientManager(IEnumerable<string> readWriteHosts, IEnumerable<string> readOnlyHosts, int initalDb);
    public PooledRedisClientManager(IEnumerable<string> readWriteHosts, IEnumerable<string> readOnlyHosts, RedisClientManagerConfig config);
    public PooledRedisClientManager(IEnumerable<string> readWriteHosts, IEnumerable<string> readOnlyHosts, RedisClientManagerConfig config, int initalDb);

基本上我的问题是:

  • 获取IRedisNativeClient实例的最佳方法是什么?

  • GetRedisClient方法可以吗?我每次需要进行Redis操作时都会调用它

提前致谢

1 个答案:

答案 0 :(得分:0)

  

我见过人们使用PooledRedisClientManager和的例子   传递一个连接字符串,但我有权访问的重载没有   接受一个字符串(v2.2.0.20691)。

此构造函数接受字符串:

public PooledRedisClientManager(params string[] readWriteHosts);

您可以使用Redis Connection String创建新实例,例如:

var connStr = "redis://clientId:pass@host:1?ssl=true&db=0&connectTimeout=2&sendtimeout=3";
var redisManager = new PooledRedisClientManager(connStr);

每当您想要访问客户端时,都可以调用GetClient(),并在完成后将其丢弃回池中,例如:

using (IRedisClient client = redisManager.GetClient())
{
   //..       
}

GetClient() API返回IRedisClient,它始终是RedisClient具体类型的实例,它继承自RedisNativeClient,因此单个实​​例可以安全地在任何实例之间自由投射以下类型:

  • RedisClient
  • IRedisClient
  • RedisNativeClient
  • IRedisNativeClient