You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore iOS:仅缓存离线写入的相关技术疑问

Firestore iOS:仅缓存离线写入的相关技术疑问

嘿,我来帮你理清楚这个Firestore的缓存问题~

首先先还原你的场景:

我的数据库里有大量对象,出于性能考虑,我需要禁用持久化缓存,用了这段Swift代码:

let settings = FirestoreSettings()
settings.cacheSettings = MemoryCacheSettings()
Firestore.firestore().settings = settings

现在我想知道:禁用缓存后,离线状态下的写入操作还能在app重启后被保存并后续同步吗?还是说退出app后这些写入就丢失了?
我的目标是禁用全数据集的缓存,只保留离线编辑内容。

接下来直接给你明确的答案和解决方案:

  • 关于离线写入的留存:当你使用MemoryCacheSettings时,所有缓存数据(包括暂存的离线写入)都只存在内存中。一旦app退出或者进程被杀死,内存里的这些数据就会被彻底清除,下次启动app时,之前的离线写入就找不回来了,没法再同步到云端。

  • 针对你的核心目标(禁用全数据集缓存,仅保留离线写入),其实不需要完全切换到内存缓存,Firestore的持久化缓存可以通过配置来满足你的需求:

    • 你可以使用PersistentCacheSettings,并设置一个合理的缓存容量上限。当本地缓存达到这个上限时,Firestore会自动清理掉最久未使用的文档数据,而离线状态下的待同步写入(pending writes)会被优先保留,不会被清理。
    • 示例代码如下:
      // 可以设置具体的缓存大小,比如100MB(100*1024*1024字节),或者用FirestoreCacheSizeUnlimited不限制
      let cacheSettings = PersistentCacheSettings(cacheSizeBytes: 100 * 1024 * 1024)
      let settings = FirestoreSettings()
      settings.cacheSettings = cacheSettings
      Firestore.firestore().settings = settings
      
    • 如果你希望尽可能减少查询文档的缓存,还可以在每次查询时添加source: .server参数,强制查询直接从云端获取数据,不走本地缓存,这样本地缓存里就不会积累太多查询到的文档,而离线写入依然会被正常持久化保存。

备注:内容来源于stack exchange,提问作者Hundley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:34:31