gpt4 book ai didi

c# - StackExchange Redis 中的 KeysAsync 方法在哪里

转载 作者:可可西里 更新时间:2023-11-01 11:23:57 30 4
gpt4 key购买 nike

查看StackExchange.Redis库中的IServer接口(interface),发现有一个Keys将运行 KEYS 的方法或 SCAN redis 中的命令取决于服务器功能。但后来我注意到没有异步方法可以提供 SCAN异步功能。

在我的情况下,我正在优化依赖于 redis 的 SCAN 的 Web API 应用程序用于查找先前缓存的请求值。给它一些巨大的负载,我注意到 StackExchange.Redis 正在提供超时异常并进一步跟踪它我注意到它正在引发这些异常,因为存在高度并发的情况,其中每个调用都通过 Keys 同步。方法最终。因此,此同步调用将超时。所以我的问题是,为什么 Keys 方法没有异步版本?如果我能更好地解决这种情况,我能做些什么?

PS:要了解我在该 Web API 中做了什么,请考虑以下代码,该代码将模拟我的情况:

Partitioner.Create(0, 500000, 10000).AsParallel().Select(async range =>
{
for (var i = range.Item1; i < range.Item2; i++)
{
var keys = _server.Keys(0, "ab*<cd*efg>*", 50).Select(x => (string) x);
await Task.WhenAll(keys.Select(key => _database.StringGetAsync(key)));
}
})).Wait();

最佳答案

现在我已经使用原始执行 api 解决了我的问题,以防其他人遇到这个问题,这对我有用。

Partitioner.Create(0, 500000, 10000).AsParallel().Select(async range =>
{
for (var i = range.Item1; i < range.Item2; i++)
{
var keys = await _database.ExecuteAsync("SCAN", "0", "MATCH", pattern).ContinueWith(x =>
{
return Task.FromResult(((RedisResult[]) ((RedisResult[]) x.Result)[1]).Select(y => (string) y));
}).Unwrap();
await Task.WhenAll(keys.Select(key => _database.StringGetAsync(key)));
}
})).Wait();

当然,它也不是那么干净。除非其他人有更好的解决方案,否则这就是我要解决的问题。

关于c# - StackExchange Redis 中的 KeysAsync 方法在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54201383/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com