#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.