将新实体发布到数据存储后,我将页面重定向到一个新 URL,该 URL 列出了该组中的所有实体。当我重定向时,页面显示过时的结果,我必须重新加载才能看到数据存储中的新实体列表。
我知道最终一致性。这就是我看到陈旧结果的原因吗?
例如,
我的数据存储有一个用户 - 用户 1 然后,在一个表单中,我添加了一个用户——用户 2 该实体被放入数据存储区,然后我重定向到一个新的 url,即“get/users”
在重定向中我只看到用户 1,但如果我刷新页面我看到用户 2。 我有什么办法可以保证或帮助防止过时的结果?
最佳答案
是的,这是你所说的“最终一致性”造成的。
我有一些建议:
- 使用 AJAX。使用重定向会导致不必要的额外工作:
- 一个额外的(不必要的)HTTP 请求(网络带宽、延迟、服务器资源、移动数据成本等)
- 一个额外的(不必要的)数据存储查询来确认您已经知道的内容
- 使用 JavaScript 更新在 XMLHttpRequest 成功时向用户显示的用户列表;不要执行另一个查询。
- 如果您确实需要用户对象,您可以从数据存储中通过键获取(而不是查询),这将是高度一致的。
- 如果您确实需要强一致性查询,请使用强一致性的祖先查询。在成功响应中发送该查询的结果并相应地更新您的 UI。
- 注意:使用祖先查询需要一个实体组,该实体组被限制为约 1 次写入/秒;例如,这个速率足以记录博客文章的评论,但可能不足以在您的应用程序中创建新用户
关于google-app-engine - 在本地环境中重定向后,我是否应该期待过时的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15773892/