- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我假设我们应该使用 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
}
最佳答案
请阅读 proper usage of Redis Client Manager 上的文档应该只用作单例。
BasicRedisClientManager
没有任何连接池,因此每次调用 GetClient()
时,您都会打开一个与 redis 服务器的新 TCP 连接。除非您了解其含义,否则您应该使用其中一个池化 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
}
}
“Unknown Command Role”错误是由于使用了旧版本的 Redis 服务器。 ROLE redis 2.8.12 中添加了命令,但此 API 应为 only be used if your using redis-server v2.8.12+ ,所以默认情况下你不应该得到这个错误。您可以通过升级到 stable v3.0 or old 2.8 versions of redis-server 来避免此错误。有这个命令。
如果您想继续使用旧版本,请使用 INFO命令检查您正在运行的版本,然后告诉 ServiceStack.Redis 版本是什么:
RedisConfig.AssumeServerVersion = 2600; //e.g. v2.6
RedisConfig.AssumeServerVersion = 2612; //e.g. v2.6.12
关于multithreading - 如何在多线程环境下正确使用redis with servicestack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34129853/
我是一名优秀的程序员,十分优秀!