C# Redis Get字符串似乎很慢

C# Redis Get字符串似乎很慢,c#,stackexchange.redis,C#,Stackexchange.redis,我编写了一些测试代码,从我的Redis缓存中检索1000个字符串。显然,它在这个测试中得到的是相同的字符串,但编写它是为了看看需要多长时间才能得到这1000个项目 测试在23秒内完成,因此每秒只有大约43个字符串,这似乎相当慢 我在本地针对Azure中的Redis实例运行此操作,因此我假设会有一些延迟。我是否错过了一些东西,或者是否有办法缩短获得这1000件物品的时间 在我的生产环境中,可能需要检索数千项 class Program { static async Task Main(st

我编写了一些测试代码,从我的
Redis缓存中检索1000个字符串。显然,它在这个测试中得到的是相同的字符串,但编写它是为了看看需要多长时间才能得到这1000个项目

测试在
23秒
内完成,因此每秒只有大约
43个字符串
,这似乎相当慢

我在本地针对
Azure
中的
Redis
实例运行此操作,因此我假设会有一些延迟。我是否错过了一些东西,或者是否有办法缩短获得这1000件物品的时间

在我的生产环境中,可能需要检索数千项

class Program
{
    static async Task Main(string[] args)
    {
        var connectionString = @"testserver-rc.redis.cache.windows.net:6380,password=password,ssl=True,abortConnect=False,defaultDatabase=2";

        var redisClient = new StackExchangeRedisCacheClient(new NewtonsoftSerializer(), connectionString, 2);

        await TestGets(redisClient);
        Console.ReadLine();
    }

    private static async Task TestGets(StackExchangeRedisCacheClient redisClient)
    {
        Console.WriteLine("Running...");

        var sw = new Stopwatch();
        sw.Start();

        for (var i = 0; i < 1000; i++)
        {
            await redisClient.Database.StringGetAsync("test_T-0004");
        }

        Console.WriteLine($"{sw.Elapsed.Seconds} seconds");
    }
}
类程序
{
静态异步任务主(字符串[]args)
{
var connectionString=@“testserver rc.redis.cache.windows.net:6380,password=password,ssl=True,abortConnect=False,defaultDatabase=2”;
var redisClient=new StackExchangeRedisCacheClient(new NewtonsoftSerializer(),connectionString,2);
等待testget(redisClient);
Console.ReadLine();
}
专用静态异步任务TestGets(StackExchangeDiscacheClient redisClient)
{
控制台。WriteLine(“正在运行…”);
var sw=新秒表();
sw.Start();
对于(变量i=0;i<1000;i++)
{
等待redisClient.Database.StringGetAsync(“test_T-0004”);
}
WriteLine($“{sw.appeased.Seconds}Seconds”);
}
}

43秒?听起来很快。这意味着包括开销和延迟,每个查询要花费23毫秒

我认为您希望并行化查询

尝试将查询行替换为

await Task.WhenAll(Enumerable.Range(0, 1000).Select(I => redisClient.Database.StringGetAsync("test_T-0004"));

问题是您受到延迟限制。您正在等待每个请求完成,然后再触发下一个请求。

我尝试在Azure中的同一区域运行代码,代码大约在2秒钟内完成。看起来我所看到的缓慢是由于在本地机器上针对Azure中的Redis缓存运行它的延迟造成的。