我正在尝试有效地将75k +字符串(文件名)插入到redis排序集中以进行初始数据播种。有了这段代码,我得到的RedisConnectionException: SocketClosed on ZADD
可能来自于同时发生的过多连接。如何解决此问题并改进我的代码以确保所有内容都成功添加?
List<string> filenames = new List<string> { "a.xml", "b.xml", "...etc 75k times" };
var tasks = new List<Task<bool>>();
using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(redisHost))
{
IDatabase db = redis.GetDatabase();
foreach (var filename in filenames)
{
tasks.Add(db.SortedSetAddAsync("files", filename, 0));
}
Console.WriteLine($"Task count: {tasks.Count}");
}
await Task.WhenAll(tasks.ToArray());
Console.WriteLine($"Successful: {tasks.Count(t => t.Result)}");
答案 0 :(得分:2)
using
确保ConnectionMultiplexer
得到妥善处理。
但是它并不等待所有任务先完成。
您应该将Task.WhenAll移动到using
statememnt。
using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(redisHost))
{
IDatabase db = redis.GetDatabase();
foreach (var filename in filenames)
{
tasks.Add(db.SortedSetAddAsync("files", filename, 0));
}
Console.WriteLine($"Task count: {tasks.Count}");
await Task.WhenAll(tasks.ToArray());
}