c# - Firebase RealTime DB - 查询返回旧的 DataSnapshot - 而不是新键,除非重新启动应用程序
问题描述
我每次从排序的数据库中检索 10 个键。
FirebaseDatabase.DefaultInstance.GetReference("CarsForSale/")
.OrderByKey().EndAt(lastSavedKey).LimitToLast(10).GetValueAsync()
它工作正常。但是当新项目添加到数据库中时,除非我重置应用程序,否则我无法检索这些新值。如果我不使用查询.OrderByKey().EndAt().LimitToLast
,我会在不重置应用程序的情况下从数据库中获取新密钥
我的猜测是,当我在某个位置查询值时,它会在本地缓存它。我有一段时间的解决方案正在使用KeepSynced(true)
并且它有效。
DatabaseReference dtr = FirebaseDatabase.DefaultInstance.GetReference(path);
dtr.KeepSynced(true);
dtr.OrderByKey().EndAt(lastKey).LimitToLast(10).GetValueAsync()
但这使我的应用程序非常慢,因为它会同步和缓存整个数据库引用。因此,我尝试仅对每个排序的 10 个键的查询应用 KeepSynced,但这没有意义。
我可以做些什么来确保当我从数据库中查询密钥以获取最新的密钥而无需重新启动我的应用程序或使其缓存变慢时?
解决方案
但是当新项目添加到数据库中时,除非我重置应用程序,否则我无法检索这些新值。
这是因为第GetValueAsync()
一个从缓存中获取值,然后才更新缓存。这是一个令人讨厌的行为,不幸的是无法改变,我在这里解释了:Firebase Offline Capabilities and addListenerForSingleValueEvent。我也刚刚更新了 Android/iOS 上较新get
/getData
方法的答案,但我认为 C#/Unity SDK 中还不存在。
我在链接答案中解释的选项也适用于此处,因此我将关闭您的问题作为重复项。如果您还有其他问题,请在此处(如果是关于您的代码/C#)或那里(如果是关于一般缓存行为)发表评论。
推荐阅读
- c# - 如何使用 MatroxImagingLibrary 修复“BadImageFormatException”?
- php - 如何从数据库中检索当前的产品 ID?
- javascript - 为什么我的 vue.js 按钮没有创建新的文本区域?
- java - 错误 yarn.ApplicationMaster:用户类抛出异常:java.lang.NoClassDefFoundError:scala/Function0$class
- javascript - 多层应用程序中的 Javascript 守卫
- r - 无法使用 R 中的 dbplyr 将 Oracle 字符串转换为日期
- html - 如何通过 VBA 从网站的 dd 标签中获取数据
- javascript - 为什么补充 mapbox 地理编码器只允许一次搜索?
- ios - 我们可以将搜索应用于从 json 解析中获取的数组的 tablview
- ios - 弱引用的 Delegates 变为 nil