首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Redis插入到散列是非常非常(!)慢的?

Redis插入到散列是非常非常(!)慢的?
EN

Stack Overflow用户
提问于 2014-05-11 07:09:40
回答 1查看 2K关注 0票数 1

我有一个参差不齐的随机数数组(1M x 100):

代码语言:javascript
运行
复制
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。( )

锯齿数组:

代码语言:javascript
运行
复制
int b = 1000000;
int[ ][] Friends = new int[b][];

(一切都好。)

随机数的初始化:

代码语言:javascript
运行
复制
  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)

代码语言:javascript
运行
复制
  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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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#也不是实现非常高吞吐量的最佳语言。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23589961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档