我正在使用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的目的或正确用法?
而且,最重要的是,我可以做些什么来更快地检索这些键和哈希值吗?
答案 0 :(得分:0)
如果您需要所有KEY *,则将它们保留为一个值将提高速度。您可以将对象保留在AllKeys下以显示所有Key。
SetAllObject
cache.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
GetAllObject
JsonConvert.DeserializeObject<List<TEntity>>(await cache.StringGetAsync("AllKeys")).ToList();