2015-02-09 24 views
0

我希望这不是一个愚蠢的问题,或者一个制定错误的问题。 为了我的代码的目的,我得到了jquery的一个按钮的值,在表中将它与ajax一起发布,然后在代码的另一部分中获取它。这是简单的解释。我赞赏这个问题,但不要质疑我为什么这样做,因为这是它的工作原理,我不会改变它。我在这个postgresql查询中获取缓存数据吗?

现在的事情是,我最终选择查询得到的数据只是在最后一页重新加载之前注册的数据。

如果您需要看到代码,这是关于这个同样的问题的链接,我刚才的问题:Code returns the latest value before last refresh instead of the latest value inserted?

我在想,如果我得到这样的数据的原因有事情做与缓存?

+0

请在问题中发布代码的相关部分。 – 2015-02-09 15:22:20

+0

肯定听起来像是一个竞争条件,而不是缓存问题。 – 2015-02-10 06:47:34

+0

@joeLove:实际上它不是缓存相关的,你是对的。我用文件写同样的东西写临时数据,它给了我相同的结果。 – 2015-02-10 13:57:50

回答

0

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

但是,我发现Joe Love的答案非常有用,因为我之前没有听说过/考虑过赛车状况。另外,说postgres并没有真正“缓存”数据的好处是:

1

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

Postgres并没有真正“缓存”数据,以至于返回旧的结果,但未提交的结果将永远不会返回 - 在任何其他会话看到它们之前,必须首先提交更新。

+0

但是由于我需要更新并且在两个不同的文件中进行读取,所以这是不可能的。我正在阅读flock(),但(显然)它不会阻止来自其他进程的文件。我真的不知道如何解决这个问题。 – 2015-02-10 14:58:46

+0

你可以让1个文件调用另一个文件,或者有1个等待直到另一个完成? – 2015-02-10 14:59:39

+0

这就是我想要做的。但我还没有找到任何方法来做到这一点。 – 2015-02-10 15:00:53

相关问题