首页新闻找找看学习计划

Redis 号称每秒可写入好几万的数据。为什么我执行下面代码要很长时间。

0
[待解决问题]
   for (int i = 0; i < 60000; i++)
            {

                using (var x = RedisManager.GetClient())
                {
                    x.Set<int>("kk"+i, i+1);  
                }


            }

代码如上。为什么执行6万次写入好像差不多花了5秒时间。

yzy的主页 yzy | 菜鸟二级 | 园豆:309
提问于:2015-11-09 11:45
< >
分享
所有回答(5)
0

//从主 redis中获取连接,写只有这么快
public IRedisClient GetClient() { lock (writeClients) { AssertValidReadWritePool(); RedisClient inActiveClient; while ((inActiveClient = GetInActiveWriteClient()) == null) { if (PoolTimeout.HasValue) { // wait for a connection, cry out if made to wait too long if (!Monitor.Wait(writeClients, PoolTimeout.Value)) throw new TimeoutException(PoolTimeoutError); } else Monitor.Wait(writeClients, RecheckPoolAfterMs); } WritePoolIndex++; inActiveClient.Active = true; if (this.ConnectTimeout != null) { inActiveClient.ConnectTimeout = this.ConnectTimeout.Value; } if (this.SocketSendTimeout.HasValue) { inActiveClient.SendTimeout = this.SocketSendTimeout.Value; } if (this.SocketReceiveTimeout.HasValue) { inActiveClient.ReceiveTimeout = this.SocketReceiveTimeout.Value; } if (this.IdleTimeOutSecs.HasValue) { inActiveClient.IdleTimeOutSecs = this.IdleTimeOutSecs.Value; } inActiveClient.NamespacePrefix = NamespacePrefix; //Reset database to default if changed if (inActiveClient.Db != Db) { inActiveClient.ChangeDb(Db); } return inActiveClient; } }
稳稳的河 | 园豆:4183 (老鸟四级) | 2015-11-09 12:41

请问下,如果写入服务器配置了多台,这里是否可以指定写入的服务器。

支持(0) 反对(0) yzy | 园豆:309 (菜鸟二级) | 2015-11-09 12:45

@yzy: PoolManagerFactory.CreateManager()里面可以传参的,自己去看看吧,用多线程写吧,每个服务器一个线程

支持(0) 反对(0) 稳稳的河 | 园豆:4183 (老鸟四级) | 2015-11-09 12:48
0

创建一个RedisManager.GetClient()把所有数据一次提交就可以了。

````` | 园豆:14268 (专家六级) | 2015-11-09 12:42

我主要是想测试 多连接的写入性能。

支持(0) 反对(0) yzy | 园豆:309 (菜鸟二级) | 2015-11-09 12:44

@yzy:   那和写入已经没撒关系,多链接创建也需要时间。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2015-11-09 16:56
0

这样写我估计放在本地变量里面也慢得要死吧?

xiezhenhao | 园豆:100 (初学一级) | 2015-11-09 15:49
0

绝大部分时间花在了创建Redis的连接实例上了

Zery | 园豆:6069 (大侠五级) | 2015-11-09 22:31
0

因为只是号称。Java还  号称跨平台呢。但是这些号称 只是对于那些牛人的……

对于一般人来说还是不要用了。因为用了这些号称的东西,不然帮不上忙。而且还增加成本

田麦成 | 园豆:1982 (小虾三级) | 2015-11-10 11:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册