Redis的获取字符串似乎很慢

时间:2019-03-28 09:10:55

标签: c# stackexchange.redis

我已经编写了一些测试代码来从我的Redis cache中检索1000个字符串。显然,在此测试中它得到的是相同的字符串,但是编写该代码是为了查看获得这1000个项目需要多长时间。

测试在23 seconds中完成,因此仅在43 strings per second附近,这似乎很慢。

我正在针对Redis中的Azure实例在本地运行它,因此我假设会有一些延迟。我错过了一些东西吗,还是有办法减少时间来获得这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");
    }
}

1 个答案:

答案 0 :(得分:0)

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

我认为您想并行化查询。

尝试将查询行替换为

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

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