使用管道传输的ServiceStack Redis客户端批量插入

时间:2012-12-20 20:52:41

标签: c# redis servicestack

我必须一次向redis中插入~80,000行,并且正在研究使用redis流水线操作。但是,当仅插入1000行进行测试时,使用流水线操作需要46秒,而没有流水线操作需要6秒。

在下面的代码中,我有一个按邮政编码分组的邮政编码列表,我试图插入到redis中。它们作为RedisZipCode插入,其中包含作为id的zipcode和在分组期间收集的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; }
}

没有流水线

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();
}

0 个答案:

没有答案