在类似Twitter的应用程序中,他们所做的一件事就是当有人发布推文时,他们会遍历所有关注者并在他们的时间轴中创建推文的副本。我需要类似的东西。假设我有一个关注者ID列表,那么在10/100/1000个关注者中插入推文ID的最佳方法是什么。
我使用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)如何在一个批处理中检查每个列表中的总数#,如果达到某个#,则弹出一个#?如果列表是&gt;我想做一个LeftPop 800.不确定如何在批次内完成所有操作。
请指点示例或让我在这里有一个片段。苦苦寻找好方法。非常感谢你。
更新 根据@ 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());
答案 0 :(得分:2)