Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么从Redis中提取密钥和散列的速度如此之慢?_C#_Redis_Stackexchange.redis - Fatal编程技术网

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后,运行速度大大加快。