【发布时间】: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 的用途或正确用法?
而且,最重要的是,我能做些什么来更快地检索这些键和哈希值吗?
【问题讨论】:
-
其实根据document of KEYS command推荐使用SCAN
-
是的,但是
StackOverflow.Redis库不是在后台使用SCAN吗? - stackexchange.github.io/StackExchange.Redis/KeysScan -
每一步要多长时间?和 GetServer / Keys 命令
-
@Leisen Change 提供的答案是(我相信)解决方案。将页面大小增加到 1650 后,它的运行速度明显加快。
标签: c# redis stackexchange.redis