为什么从Redis提取密钥和哈希值这么慢?

时间:2019-03-22 02:54:02

标签: c# redis stackexchange.redis

我正在使用StackOverflow.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的值来找到)。但是,此代码段检索这22个键和哈希值需要55秒。哈希值也不是很大。每个哈希中大约有19个键值对(例如名称,公司,电子邮件,电话等。不要太大)。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

SetAllObject

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

GetAllObject

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