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