一度に最大 80,000 行を redis に挿入する必要があり、そのために redis パイプラインを使用することを検討していました。ただし、1000 行のみを挿入してテストすると、パイプラインを使用した場合は 46 秒、パイプラインを使用しない場合は 6 秒かかります。
以下のコードには、redis に挿入しようとしている郵便番号ごとにグループ化された郵便番号のリストがあります。それらは、id としての郵便番号と、グループ化中に収集された郵便番号のリストを含む RedisZipCode として挿入されています。
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();
}