Redis получает строку медленно

#c# #stackexchange.redis

#c# #stackexchange.redis

Вопрос:

Я написал некоторый тестовый код для извлечения 1000 строк из моего Redis cache . Очевидно, что в этом тесте получается та же строка, но она была написана, чтобы посмотреть, сколько времени потребуется для получения этих 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:

43 в секунду? Это звучит довольно быстро. Это означает, что с учетом накладных расходов и задержки вы тратите 23 мс на запрос.

Я думаю, вы хотите распараллелить запрос.

Попробуйте заменить строку запроса на

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

Проблема в том, что вы ограничены задержкой. Вы ожидаете завершения каждого запроса, прежде чем запускать следующий.

Комментарии:

1. Я попытался запустить свой код в том же регионе в Azure, и код был завершен примерно за 2 секунды. Похоже, что медлительность, которую я наблюдал, была связана с задержкой ее запуска на моем локальном компьютере в кэше Redis в Azure.