2010-03-15 66 views
4

我在我的網站上緩存推文(30分鐘到期時間)。當緩存爲空時,第一個找到的用戶將重新填充它。在php中獲取memcache項目的到期時間?

但是,當時Twitter API可能會返回200.在這種情況下,我想將以前的數據延長30分鐘。但之前的數據已經丟失。

所以相反,我想研究重新填充緩存,比如在到期時間前5分鐘,以便我不會丟失任何日期。

那麼如何知道使用php的memcache :: get()時項目的過期時間?

另外,有沒有更好的方式來做到這一點?

回答

5

在這種情況下,這不是更好的邏輯嗎?

  • 如果緩存超過30分鐘,老,試圖從Twitter
  • 拉如果新的數據順利取出,覆蓋緩存
  • 緩存數據無限期量(或比你長得多打算反正緩存)
  • 注意在單獨的密鑰
  • 沖洗最後一次高速緩存被更新(當前時間),重複

問題是,如果你有它,只用新的數據替換數據,不要讓舊數據自動丟棄。

+0

是的,就是這樣做的方式,但最近完美無缺,我認爲實際讀取緩存過期會更好,而無需爲其設置單獨的密鑰。但是你是對的,因爲現在我知道我不會丟失數據。 所以,當你回答我應該做什麼的問題時,這並不能回答線程中的真正問題(現在是不相關的)。我仍然會將您的答案標記爲正確,但如果這是stackoverflow行爲,請告訴我。 – 2010-03-15 09:36:24

0

當您將數據放入memcache時 - 您也正在設置緩存有效的時間。所以理論上你可以把緩存創建的時間和/或緩存過期的時間放在一起。在從緩存中獲取後,您可以隨時驗證剩餘的時間,直到緩存過期並決定要執行的操作。

但讓緩存在用戶訪問時重新填充可能仍然有風險 - 可以說如果您希望在到期時間到達〜5分鐘時重新填充緩存 - 並且突然間最後沒有訪問者緩存過期前6分鐘 - 然後緩存仍然過期,沒有人會導致其重新填充。如果你想要確保緩存條目存在 - 你需要定期進行檢查 - 例如 - 做一個cronjob來緩存檢查和填充。

1

不在memcached中存儲關鍵數據。它沒有任何保證。

如果您總是需要獲得「最新的良好」緩存 - 您需要將數據存儲在任何持久性存儲中,例如數據庫或平面文件。

在這種情況下,如果在緩存中找不到任何東西 - 您可以使用twitter api請求。如果失敗 - 你從持續讀取數據。而在另一個http請求上,您將再次進行相同的迭代。

或者您可以將持久性數據放入具有相當壽命的memcache中。例如幾分鐘(1-5)讓嘰嘰喳喳服務器時間變得健康。並在其過期後重復請求。

+0

很高興看到處理取回數據的twitter API失敗的異常。 – kta 2016-11-20 06:16:08