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缓存运行它的延迟造成的。