在类似推特的应用程序中,他们所做的一件事是当有人发布推文时,他们会遍历所有关注者并在他们的时间线中创建推文的副本。我需要类似的东西。假设我有一个关注者 ID 列表,那么将推文 ID 插入到 10/100/1000 个关注者中的最佳方法是什么。
我正在使用 Azure Redis 在 Azure WebJobs 中执行此操作。每个 webjob 都会为队列中收到的每条推文自动创建。所以我可能有大约 16 个同时运行的工作,每个工作都通过关注者并插入推文。我在想如果 99% 的插入发生,它们不应该因为一个或几个失败而停止。我需要继续但记录它。
问题:我应该像下面那样做 CreateBatch 吗?如果我需要先按时间倒序检索最新的推文是否可以?高性能?
var tasks = new List<Task>();
var batch = _cache.CreateBatch();
//loop start
tasks.Add(batch.ListRightPushAsync("follower_id", "tweet_id"));
//loop end
batch.Execute();
await Task.WhenAll(tasks.ToArray());
a) 但是如果出现故障,我该如何捕捉?试着抓?b)如何在每个列表中检查一个批次的总 # 并在达到某个 # 时弹出一个?如果列表> 800,我想做一个LeftPop。不知道如何在批处理中完成所有操作。
请给我一个示例或让我在这里有一个片段。苦苦寻找好方法。太感谢了。
更新 根据@marc 的评论,这看起来正确吗?
var tasks = new List<Task>();
followers.ForEach(f =>
{
var key = f.FollowerId;
var task = _cache.ListRightPushAsync(key, value);
task.ContinueWith(t =>
{
if (t.Result > 800) _cache.ListLeftPopAsync(key).Wait();
});
tasks.Add(task);
});
Task.WaitAll(tasks.ToArray());