Firebase IOS SDK 中的 Firestore 文档缓存

问题描述 投票:0回答:1

我在文档中读到Firebase SDK会自动从缓存中删除最不使用的文档。我在预测以下情况下会发生什么时遇到问题:

在我的主页中,我有

favorite subjects
all subjects
favorite subjects
始终会被获取,因为它始终显示。
all subjects
仅当用户访问该页面时才获取。

我通过在本地将收藏的主题的文档 ID 保存为字符串数组来获取这些收藏的主题。 然后我使用以下方法从 cache 检索它们:

let subjectsIds = userDefaults.object(forKey: subjectsKey) as? [String]
let query = db.firestore.subjects.whereField(FieldPath.documentID(), in: subjectsIds)
    

为了节省带宽,主题文档包含

last_updated
类型的字段
Timestamp
。 我首先获取缓存中的所有主题,然后获得最大的
last_updated
值。 然后我使用以下方法从服务器获取更新的文档:

let date = getGreatestLastUpdated()
let query = db.firestore.subjects.whereField("last_updated", isGreaterThan: date)

我担心用户长时间不导航到

all subjects
页面,导致缓存中的所有主题都被删除,除了收藏的主题之外,因为它们总是被提取。这将导致使用我的方法无法从服务器检索收藏主题之后尚未更新的主题。这就是 Firebase IOS SDK 中缓存删除的工作原理吗?

ios firebase google-cloud-firestore
1个回答
0
投票

Firestore SDK 为您管理离线持久性缓存。 您无法控制何时从缓存中逐出文档,因此完全有可能最终没有来自“所有主题”的文档。 文档指出(强调我的):

启用持久性后,Cloud Firestore 会缓存从后端接收到的每个文档以供离线访问。 Cloud Firestore 设置缓存大小的默认阈值。 超过默认值后,Cloud Firestore 会定期尝试清理旧的、未使用的文档。

您无法选择删除哪些文档。当缓存被清理时。它完全基于所有缓存文档的使用频率。

您应该考虑:

  1. 增加缓存大小以减少重要文档被删除的机会。
  2. 创建自己的重要文档缓存,以便在需要时不会出现任何重要内容不可用的情况。
© www.soinside.com 2019 - 2024. All rights reserved.