【问题标题】:Why is extracting keys and hashes from Redis so slow?为什么从 Redis 中提取键和哈希值这么慢?
【发布时间】:2019-08-13 00:06:46
【问题描述】:

我正在使用StackExchange.Redis 库与 Azure Redis 服务器交互,以提取一些哈希值以通过 Web api 访问。这是我的做法:

        IDatabase cache = lazyConnection.Value.GetDatabase();
        var server = lazyConnection.Value.GetServer(lazyConnection.Value.GetEndPoints().First());
        var starterKeys = server.Keys(pattern: "Monitor:*");
        var count = 0;
        foreach (var starterKey in starterKeys)
        {
            var hashEntries = cache.HashGetAll(starterKey);
            foreach (var hashEntry in hashEntries)
            {
                //put values into my model here...
            }
            count++;
        }

正好有 22 个键与模式 "Monitor:*" 匹配(通过调试并观察末尾的 count 值找到)。然而,这段代码的 sn-p,检索这 22 个键和散列需要 55 秒。哈希值也不是很大。每个散列中大约有 19 个键值对(名称、公司、电子邮件、电话等。没什么大不了的)。

为什么要花这么长时间?我认为使用 Redis 的原因之一是速度快,并通过存储聚合数据来减少数据库的负载。我可以在我的数据库中设置它并查询它(即使使用连接来获取聚合数据),我的过程将大大快于 55 秒。

我在这里做错了吗?还是我不了解 Redis 的用途或正确用法?

而且,最重要的是,我能做些什么来更快地检索这些键和哈希值吗?

【问题讨论】:

标签: c# redis stackexchange.redis


【解决方案1】:

如果您需要所有 KEY*,将它们保存在一个值中会提高速度。您可以将对象保留在 AllKeys 下以显示所有 Key。

设置所有对象

 cache.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));

获取所有对象

JsonConvert.DeserializeObject<List<TEntity>>(await cache.StringGetAsync("AllKeys")).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2015-12-04
    • 2012-02-09
    • 2015-01-02
    • 2013-03-24
    相关资源
    最近更新 更多