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
相关产品推荐
相关产品推荐

