for (int i = 0; i < 60000; i++) { using (var x = RedisManager.GetClient()) { x.Set<int>("kk"+i, i+1); } }
代码如上。为什么执行6万次写入好像差不多花了5秒时间。
//从主 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; } }
请问下,如果写入服务器配置了多台,这里是否可以指定写入的服务器。
@yzy: PoolManagerFactory.CreateManager()里面可以传参的,自己去看看吧,用多线程写吧,每个服务器一个线程
这样写我估计放在本地变量里面也慢得要死吧?
绝大部分时间花在了创建Redis的连接实例上了
因为只是号称。Java还 号称跨平台呢。但是这些号称 只是对于那些牛人的……
对于一般人来说还是不要用了。因为用了这些号称的东西,不然帮不上忙。而且还增加成本
我写1000条数据 key,value 要7秒多,本地虚拟机