如何处理本地缓存中的间隙

How to handle gaps in local cache

我有一个旨在像 Instagram 应用程序一样运行的应用程序。这意味着:

当用户打开应用程序时,会显示本地数据库中的最新内容,但会触发获取服务器最新内容的请求。如果服务器 returns 这样的数据,本地数据库会填充它,然后 UI 显示它。

那么,我该如何处理这可能在现有记录和新记录之间造成的差距?假设我的 API 每页有 10 个项目,并且有 15 个新项目。当请求 returns 时,最新的 10 个项目被插入到我的本地数据库中,这与已经存在的项目留下了 5 个项目的差距。如果用户不经常使用该应用程序,这种情况甚至可能会发生多次,如果他们有一段时间没有使用它,差距可能会很大,所以仅仅发出大量请求似乎并不是最好的选择解决方案。

第二件事是陈旧的数据。服务器上已更新或删除的项目。我可以提供一个端点来检索更改和软删除记录,这样它们仍然可以被获取,但带有 "deleted" 标志。但问题是:我应该何时以及如何提出要求?它不仅仅属于 "Enter the app -> request latest items" 流程。我应该定期轮询,也许使用某种通知吗?那如果用户不在线怎么办?

我很困惑,最近一直在谷歌搜索,但我没有找到令人信服的解决方案。它们都是 SyncAdapter 风格的东西。

谢谢。

我不确定在 Instagram 上的具体情况,但在我工作的应用程序以及我在其他应用程序周围看到的是,当您 GET 第 0 页时删除本地数据的提要。然后作为用户向下滚动,它会从互联网重新加载下一页。

我说的"delete the feed of local data"是什么意思,例如:

  • 请求是 page=0friends_recents_photos
  • onSuccess -> DELETE friends_recents_photos -> INSERT new data
  • 然后 onScroll -> loadMore
    • 请求page=1
    • onSuccess -> APPEND new data AT end

但这只是该特定提要的请求数据,其他提要(例如 followers)、详细信息(例如 UserData)或 cached/downloaded 图像会保存在缓存中以便快速访问。