我有一个参差不齐的随机数数组(1M x 100):
0 --->[ 100 random numbers]
1 --->[ 100 random numbers]
2 --->[ 100 random numbers]
.. --->[ 100 random numbers]
.. --->[ 100 random numbers]
1M --->[ 100 random numbers]这些100 random numbers是图像ID,我需要将它们映射到userId (也就是0..1M)
我想把它们存放在Redis。( )
锯齿数组:
int b = 1000000;
int[ ][] Friends = new int[b][];(一切都好。)
随机数的初始化:
for (int i = 0; i < b; i++)
{
Friends[i] = ParallelEnumerable.Range(0, 100).Select(n => appRandom.Value.Next(1, b )).ToArray();
}(一切都好。)
下面是如何使用Redis客户端输入值:(http://redis.io/topics/memory-optimization)
using (IRedisClient redisClient = new RedisClient(host))
{
for (int i = 0; i < Friends.Length; i++)
{
for (int j = 0; j < 100; j++)
redisClient.SetEntryInHash("urn:buck>" + (i / 1000), Friends[i][j].ToString(),i.ToString());
}
}问题:
插入阶段(我不关心初始化时间)--它花费了一个多小时的时间,现在还没有在25%!
相关信息:
我有一台功能强大的计算机:(win 8),还添加了<gcAllowVeryLargeObjects enabled="true" />

问题:
(相关信息:这100个数字是图像Id,我需要将它们映射到userId)
发布于 2014-05-11 08:36:11
请阅读http://redis.io/topics/benchmarks
您的性能瓶颈可能与应用程序和redis服务器之间的往返次数有关。您需要使用流水线,或者使用并发连接,或者两者都使用,以便最大限度地提高吞吐量。
参见在:https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/RedisPipelineTests.cs中使用流水线的示例
最后一点: Windows肯定不是从Redis获得最佳性能的最佳平台,而C#也不是实现非常高吞吐量的最佳语言。
https://stackoverflow.com/questions/23589961
复制相似问题