我在本地计算机上安装了一个redis实例。实例包含147848个序列化对象。我需要检索所有对象,然后应用一些逻辑。我知道没有办法一次取回所有的东西,所以首先我得到所有的钥匙

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万物体
拿到所有钥匙花了0.4秒
获取所有值需要16秒
反序列化耗时6秒
还有一个redis实例,它有100万个对象和
拿到所有钥匙花了2秒钟
获取所有值需要64秒
反序列化耗时29秒
有什么方法可以提高性能吗?

最佳答案

我认为可以通过使用多个线程来提高性能(可以使用c parallel for)。请不要认为redis是一个单线程应用程序,持久性的获得将在反序列化步骤中进行。
如果我是您,我将测量获取所有键、所有值和反序列化所有值所需的时间。有了这些信息,你可以更好地理解什么部分最慢。

10-08 02:16