ZADD 上的 SocketClosed
SocketClosed on ZADD
我正在尝试有效地将 75k+ 字符串(文件名)插入到 redis 排序集中以进行初始数据播种。使用此代码,我得到 RedisConnectionException: SocketClosed on ZADD
这可能是由于一次与 aws 的连接过多。如何解决此问题并改进我的代码以确保成功添加所有内容?
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)}");
using
确保 ConnectionMultiplexer
得到妥善处置。
但是它不会等待所有任务先完成。
您应该将 Task.WhenAll 移动到 using
语句中。
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());
}
我正在尝试有效地将 75k+ 字符串(文件名)插入到 redis 排序集中以进行初始数据播种。使用此代码,我得到 RedisConnectionException: SocketClosed on ZADD
这可能是由于一次与 aws 的连接过多。如何解决此问题并改进我的代码以确保成功添加所有内容?
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)}");
using
确保 ConnectionMultiplexer
得到妥善处置。
但是它不会等待所有任务先完成。
您应该将 Task.WhenAll 移动到 using
语句中。
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());
}