C# 为什么从Redis中提取密钥和散列的速度如此之慢?
我正在使用C# 为什么从Redis中提取密钥和散列的速度如此之慢?,c#,redis,stackexchange.redis,C#,Redis,Stackexchange.redis,我正在使用StackExchange.Redis库与Azure Redis服务器交互,以提取一些散列值,以便通过web api进行访问。我是这样做的: IDatabase cache = lazyConnection.Value.GetDatabase(); var server = lazyConnection.Value.GetServer(lazyConnection.Value.GetEndPoints().First()); var st
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:*”
(通过调试并观察末尾的计数
值找到)。然而,这段代码,检索这22个键和散列需要55秒。散列值也不是很大。每个散列中大约有19个键值对(如姓名、公司、电子邮件、电话等,没有太大)
为什么要花这么长时间?我认为使用Redis的原因之一是速度快,并通过存储聚合数据来减少数据库的负载。我可以在我的数据库中设置并查询它(甚至使用连接来获取聚合数据),我的过程将大大加快55秒
我做错什么了吗?还是我不理解Redis的用途或正确用法
而且,最重要的是,我能做些什么来更快地检索这些键和散列值吗?如果需要所有键*,将它们保留在一个值中会提高速度。可以将对象保留在“所有关键点”下以显示所有关键点 SetAllObject
cache.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
JsonConvert.DeserializeObject<List<TEntity>>(await cache.StringGetAsync("AllKeys")).ToList();
GetAllObject
cache.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
JsonConvert.DeserializeObject<List<TEntity>>(await cache.StringGetAsync("AllKeys")).ToList();
JsonConvert.DeserializeObject(wait cache.StringGetAsync(“AllKeys”)).ToList();
如果您需要所有键*,将它们保留在一个值中将提高速度。可以将对象保留在“所有关键点”下以显示所有关键点
SetAllObject
cache.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
JsonConvert.DeserializeObject<List<TEntity>>(await cache.StringGetAsync("AllKeys")).ToList();
GetAllObject
cache.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
JsonConvert.DeserializeObject<List<TEntity>>(await cache.StringGetAsync("AllKeys")).ToList();
JsonConvert.DeserializeObject(wait cache.StringGetAsync(“AllKeys”)).ToList();
实际上,根据是,建议使用扫描,但是堆栈溢出.Redis
库是否在引擎盖下使用SCAN
每一步需要多长时间?而GetServer/Keys命令@Leisen Change提供的答案的可能副本(我相信)就是解决方案。将页面大小增加到1650后,它的运行速度要快得多。实际上,根据Yes,建议使用SCAN,但是StackOverflow.Redis
库是否使用SCAN
引擎盖下?-每一步需要多长时间?而GetServer/Keys命令@Leisen Change提供的答案的可能副本(我相信)就是解决方案。将页面大小增加到1650后,运行速度大大加快。