为了这个问题并更好地说明我的问题,让我们尝试调试instagram如何提供其无限滚动的供稿。 (此外,请注意,这个问题是关于他们如何提供Feed的,而不是关于他们如何对Feed中的帖子进行排名的。)
这就是我所拥有的:
用户在 t1 处打开应用。它发送一个请求以获取该用户的提要。
服务器找到 t1 (当前时间)和 t0 (用户的上次活动时间)之间的所有帖子。假设这些结果为 1000 。
服务器然后过滤掉与该特定用户相关的 1000 中的帖子。假设它以 250 个帖子结束。
然后,服务器使用黑盒来基于一些变数对这些帖子进行排名()。
此后,它将 250个帖子的ID存储在REDIS中。
在250个ID中,它会分页并找出前30个ID 。然后,它将查询这30个帖子的所有信息,并将结果发送回给呼叫者。
好酷吗?好。
现在,用户向下滚动并很快耗尽了15个帖子。由于Instagram很酷,因此它注意到用户已经用尽了15条信息,并自动获取了接下来的30条信息,而用户没有看到“ LOADING”进度条。
在某个地方,这是服务器发生的事情:它用尽了存储在REDIS中的250个ID 。
时间键:
t0::今天打开应用之前,用户的最后活动。 (可能是前两天,可能是 5小时。我们不知道。)
t1::用户今天第一次打开了该应用程序。
t2 :用户滚动浏览了前30个帖子,并要求提供更多帖子。或用户喜欢一个帖子。可以是任何一种活动。我们不知道。
如果现在收到请求,则必须显示旧内容。早于t0
。这是因为当您向下滚动时,实际上是过去。由于用户的最后活动是 t0 (他上次打开应用程序时,不是现在),所以我们必须查找早于 t0 的帖子。但是,我们不再存储 t0 ,因为用户的上一次活动可能已更改为 t6 。
我该如何解决?
此外,如果用户向上滚动并询问新帖子:我们仍然需要在 t1 之后(即用户现在打开应用程序的时候)计算新帖子,直到现在并添加将它们保存到REDIS缓存 AT TOP。
如何跟踪这些 t0,t1 等?最快的方法是什么?