servicestack,C#,Redis,servicestack" /> servicestack,C#,Redis,servicestack" />

C# 使用管道的ServiceStack Redis客户端大容量插入

C# 使用管道的ServiceStack Redis客户端大容量插入,c#,redis,servicestack,C#,Redis,servicestack,我必须一次向redis中插入约80000行,并且正在考虑使用redis管道来实现这一点。然而,当测试仅插入1000行时,使用流水线需要46秒,而不使用流水线则需要6秒 在下面的代码中,我有一个按zipcode分组的zipcodes列表,我正试图将其插入redis。它们将作为RedisZipCode插入,该代码包含zipcode as id和分组过程中收集的zipcodes列表 public class ZipCode { public string city { get; set; }

我必须一次向redis中插入约80000行,并且正在考虑使用redis管道来实现这一点。然而,当测试仅插入1000行时,使用流水线需要46秒,而不使用流水线则需要6秒

在下面的代码中,我有一个按zipcode分组的zipcodes列表,我正试图将其插入redis。它们将作为RedisZipCode插入,该代码包含zipcode as id和分组过程中收集的zipcodes列表

public class ZipCode
{
    public string city { get; set; }
    public string state { get; set; }
    public string zip_code { get; set; }
}

public class RedisZipCode
{
    public string id { get; set; }
    public List<ZipCode> zipcodes{ get; set; }
}
公共类ZipCode
{
公共字符串city{get;set;}
公共字符串状态{get;set;}
公共字符串邮政编码{get;set;}
}
公共类RedisZipCode
{
公共字符串id{get;set;}
公共列表zipcodes{get;set;}
}
无需流水线

using (var zipCodeClient = redisClient.GetTypedClient<RedisZipCode>())
{
    foreach (var item in zipcodes.GroupBy(z => z.zip_code))
    {
        zipCodeClient.Store(new RedisZipCode(item.ToList()));
    }
}
using (var zipCodeClient = redisClient.GetTypedClient<RedisZipCode>())
using (var pipeline = zipCodeClient.CreatePipeline())
{
    foreach (var item in zipcodes.GroupBy(z => z.zip_code))
    {
        pipeline.QueueCommand(c => c.Store(new RedisZipCode(item.ToList())));
    }
    pipeline.Flush();
}
使用(var zipCodeClient=redisClient.GetTypedClient())
{
foreach(zipcodes.GroupBy中的var项(z=>z.zip_代码))
{
存储(新的RedisZipCode(item.ToList());
}
}
使用流水线

using (var zipCodeClient = redisClient.GetTypedClient<RedisZipCode>())
{
    foreach (var item in zipcodes.GroupBy(z => z.zip_code))
    {
        zipCodeClient.Store(new RedisZipCode(item.ToList()));
    }
}
using (var zipCodeClient = redisClient.GetTypedClient<RedisZipCode>())
using (var pipeline = zipCodeClient.CreatePipeline())
{
    foreach (var item in zipcodes.GroupBy(z => z.zip_code))
    {
        pipeline.QueueCommand(c => c.Store(new RedisZipCode(item.ToList())));
    }
    pipeline.Flush();
}
使用(var zipCodeClient=redisClient.GetTypedClient())
使用(var pipeline=zipCodeClient.CreatePipeline())
{
foreach(zipcodes.GroupBy中的var项(z=>z.zip_代码))
{
pipeline.QueueCommand(c=>c.Store(新的RedisZipCode(item.ToList()));
}
管道冲洗();
}

这些基准测试结果是否针对本地redis服务器实例进行测试?如果是,与远程redis服务器相比,它们的数量是多少?这些基准是针对本地redis服务器实例的。在远程服务器上运行时,非管道化的时间为3秒,使用管道化时未完成。它以流水线方式运行了超过6分钟,并且一直在运行。不要忘记包的缓冲区大小。用更多的管线操作来测试它