【问题标题】:Am I getting cached data in this postgresql query?我是否在此 postgresql 查询中获取缓存数据?
【发布时间】:2015-04-09 07:45:01
【问题描述】:

我希望这不是一个愚蠢的问题,或者一个表述错误的问题。 出于我的代码的目的,我使用 jquery 获取按钮的值,使用 ajax 将其发布到表中,然后在代码的另一部分中获取它。这是简单的解释。我很感激这种担忧,但不要质疑我为什么这样做,因为它是这样工作的,我不会改变它。

现在问题是我最终通过选择查询获得的数据只是在最后一个页面重新加载之前注册的数据。

如果您需要查看代码,这是我之前关于同一问题的问题的链接:Code returns the latest value before last refresh instead of the latest value inserted?

我想知道我获得此类数据的原因是否与缓存有关?

【问题讨论】:

  • 请在问题中贴出代码的相关部分。
  • 听起来确实像是竞争条件,而不是缓存问题。
  • @joeLove:实际上它与缓存无关,你是对的。我用一个文件做了同样的事情来写入临时数据,它给了我同样的结果。
  • @joeLove:从我读到的内容来看,这可能真的是一个竞争条件。一旦我澄清我的想法,我会回到这篇文章。同时,您不妨发表您的评论作为答案。如果你是对的,我会确保接受它

标签: php jquery postgresql caching


【解决方案1】:

您的问题似乎是竞争条件,而不是缓存问题。当运行 2 个异步进程时,其中 1 个正在更新/插入,另一个正在读取,“读取”进程很可能在数据提交之前开始读取。最好的解决方案是在“1 个线程”(同步)中进行更新和读取,其中更新和读取按特定顺序完成,并保证在开始读取之前完成更新。

Postgres 并没有真正“缓存”数据,即永远不会返回旧结果,但永远不会返回未提交的结果——必须首先提交更新,然后任何其他会话才能看到它们。

【讨论】:

  • 但由于我需要在 2 个不同的文件中进行更新和读取,所以这是不可能的。我正在阅读有关 flock() 的信息,但(显然)它不会阻止其他进程的文件。我真的不知道如何解决这个问题。
  • 你可以让 1 个文件调用另一个,还是让 1 个等到另一个完成?
  • 这就是我想要做的。但我还没有找到任何方法来做到这一点。
  • 尝试使用此处的示例将 ajax 异步设置为 false:stackoverflow.com/questions/755885/…
【解决方案2】:

尽管我最初认为自己这是一个竞争条件(好建议),但它实际上是一个客户端/服务器端交互问题。 竞争条件可能会导致显示之前的结果,但不一定是之前页面加载之前的结果。

但是,我发现 Joe Love 的回答非常有用,因为我之前没有听说过/考虑过比赛条件。另外,说一下 postgres 并没有真正“缓存”数据是有道理的

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2022-01-11
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2021-11-17
    相关资源
    最近更新 更多