2015-02-09 33 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

相關問題