【问题标题】:Redis performance on Windows localhostWindows localhost 上的 Redis 性能
【发布时间】:2017-01-04 17:32:36
【问题描述】:

我在本地机器上安装了一个 Redis 实例。该实例包含 147,848 个序列化对象。我需要检索所有对象,然后应用一些逻辑。我知道没有办法一次检索所有对象,所以首先我将所有键作为

var keys = client.GetAllKeys();

然后我遍历键以获取 json,然后将它们反序列化为

var keys = client.GetAllKeys();
foreach (string key in keys)
{
    var sobj = client.Get<string>(key);
    MyClass desobj = JsonConvert.DeserializeObject<MyClass>(sobj);
    myList.Add(desobj);
}

所有这些过程,获取所有键,然后检索所有对象并反序列化它们,大约需要 32 秒

对于 15 万个对象

  1. 获取所有密钥耗时 0.4 秒
  2. 获取所有值需要 16 秒
  3. 反序列化耗时 6 秒

还有一个 Redis 实例有 100 万个对象和

  1. 获取所有密钥需要 2 秒
  2. 获取所有值需要 64 秒
  3. 反序列化耗时 29 秒

有什么办法可以提高性能吗?

【问题讨论】:

    标签: c# windows performance redis


    【解决方案1】:

    我认为您可以通过使用多个线程来提高性能(您可以使用 c# 并行)。请注意,Redis 是一个单线程应用程序,并且持久性的获得将在 DeSerializing 步骤中。

    如果我是你,我会测量获取所有键、所有值和反序列化所有值所需的时间。有了这些信息,您可以更好地了解哪个部分最慢。

    【讨论】:

    • 由于瓶颈在redis的来回往返中,我的一些想法是:你可以使用内存字典而不是redis吗?你能将价值整合到更少但更大的对象中吗?你可以使用多个redis实例来并行读取吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 2014-02-13
    • 1970-01-01
    • 2013-05-04
    • 2016-04-18
    • 1970-01-01
    • 2011-01-28
    • 2010-12-23
    相关资源
    最近更新 更多