我在使用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操作时都会调用它
提前致谢
答案 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
,因此单个实例可以安全地在任何实例之间自由投射以下类型: