我以为我们应该使用basicredisclientmanager或pooledredisclientmanager?我试过了
private void dddddd()
{
for(int i=0;i<=1000;i++)
{
var client = new BasicRedisClientManager(new string[] { "host1", "host2", "host3" }).GetClient();
//do something with client
}
}
对于前100个循环,此循环运行良好,但是此后,我始终收到错误消息“未知命令角色”?那是什么以及如何解决?我需要帮助!
我还尝试创建一个名为MyRedisMgr的新类,并创建了一个静态属性来创建某种单例,但是它也不起作用。
public BasicRedisClientManager MyMgr = new BasicRedisClientManager(new string[] { "host1", "host2", "host3" });
然后我像这样使用它
for(int i=0;i<=1000;i++)
{
var client = MyRedisMgr.MyMgr.GetClient();
//do something with client
}
请阅读有关Redis Client Manager正确用法的文档,该文档仅应作为一个实例使用。
在BasicRedisClientManager
没有任何连接池所以每次通话时间GetClient()
你打开与Redis的服务器新的TCP连接。除非您了解其中的含义,否则应该使用Pooled Redis客户管理器之一,例如:RedisManagerPool
。
您还需要在使用完客户端后始终对其进行处置,以便可以重新使用该客户端或正确处置TCP连接。
因此,您的代码示例应如下所示:
//Always use the same singleton instance of a Client Manager
var redisManager = new RedisManagerPool(masterHost);
for(int i=0;i<=1000;i++)
{
using (var redis = redisManager.GetClient())
{
//do something with client
}
}
“未知命令角色”错误是由于使用旧版本的Redis Server引起的。该角色在Redis的2.8.12添加的命令,但该API应该如果你使用Redis的服务器v2.8.12 +只能用,所以你应该不会被默认收到此错误。您可以通过升级到稳定的v3.0或具有此命令的旧2.8版本的redis-server来避免此错误。
如果要继续使用旧版本,请使用INFO命令检查您正在运行的版本,然后告诉ServiceStack.Redis该版本是什么:
RedisConfig.AssumeServerVersion = 2600; //e.g. v2.6
RedisConfig.AssumeServerVersion = 2612; //e.g. v2.6.12
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句