在重定向本地环境后,我是否应该期待过时的结果?

时间:2013-04-02 20:37:47

标签: google-app-engine google-cloud-datastore browser-cache app-engine-ndb

将新实体发布到数据存储区后,我将页面重定向到一个新的URL,列出该组中的所有实体。当我重定向时,页面显示过时的结果,我必须重新加载以查看数据存储区中的新实体列表。

我知道最终的一致性。这就是我看到陈旧结果的原因吗?

例如,

我的数据存储区我有一个用户 - 用户1 然后,在表单中,我添加了一个用户 - 用户2 将此实体放入数据存储区,然后重定向到新网址,即“获取/用户”

在重定向上我只看到用户1,但如果我刷新页面,我会看到用户2。 我能保证或帮助防止陈旧结果的任何方式吗?

1 个答案:

答案 0 :(得分:7)

是的,这是由你提出的“最终一致性”引起的。

我有一些建议:

  1. 使用AJAX。使用重定向会导致不必要的额外工作:
    • 额外(不必要的)HTTP请求(网络带宽,延迟,服务器资源,移动数据成本等)
    • 额外(不必要的)数据存储区查询以确认您已知道的内容
  2. 使用JavaScript更新XMLHttpRequest成功时向用户显示的用户列表;不要再执行其他查询。
  3. 如果您确实需要用户对象,则可以从数据存储区执行get by key(而不是查询),这将非常一致。
  4. 如果您确实需要强一致性查询,请使用强烈一致的祖先查询。在成功响应中发回该查询的结果,并相应地更新您的UI。
    • 注意:使用祖先查询需要一个实体组,限制为〜1次/秒;这个比率就足够了,比如在博客文章中记录评论,但可能不足以在你的应用程序中创建新用户