2017-07-27 56 views
0

我需要在有限的時間內(最長24小時)存儲一些數據,這段時間可能會或可能不會被訪問。我可以同時使用內存緩存和MySQL公司招聘在有限的時間內存儲數據:memcache vs mysql

  1. 內存緩存:設置在內存緩存與到期時間的關鍵。這將是非持續性的,但我可以與此合作。訪問數據會更快。

  2. MySql:創建一個表來存儲這些數據並維護一個作業,以在到期時間後保留這個數據。它會比較慢。

我應該使用哪一個?這是一個有效的memcache用例嗎? (因爲memcache用於存儲非常頻繁訪問的數據)

請建議是否有任何其他選項可用於存儲此類型的臨時數據。

+0

時下有什麼新東西--Redis – EvgenyKolyakov

+0

它是什麼樣的數據?你只在程序運行期間或之後使用它? .... –

+0

當前的情況是 - 如果用戶來到我們的電子商務網站並點擊某個產品,我們會向他發送一封電子郵件。我們不會在接下來的24小時內再次發送電子郵件給他,但如果在24小時後再次點擊,我們會發送電子郵件給他。所以,我正在考慮存儲這個臨時數據,無論電子郵件是否已發送給特定用戶並在發送電子郵件之前進行檢查。這將僅在24小時內有用,並在此之後重置。 – ctor

回答

1

我認爲memcache對您的情況不會很可靠。 Memcache是​​一個緩存,如果一個對象開始變滿,緩存可能會驅逐一個對象,再加上你不知道對象被刪除。因此,如果對象不存在,您不能確定它是否因驅逐而存在,或者因爲您實際上沒有放在那裏。

此外,如果您大量使用memcache並且memcache的利用率大約爲75%(這意味着您的memcache已滿),那麼我會建議不要使用memcache。由於非常高的可能性,數據將被快速清除,因爲它不被使用。如果即使這不是你的問題,那麼你可以使用memcache。

您可以將這些數據存儲在mysql中。這是一個不錯的選擇。

你可以嘗試的另一種選擇是mongodb或其他數據庫,你可以選擇ttl(生存時間)。好處是你可以確定ttl之前沒有驅逐。

+0

正如我所說的,數據不一定要持久。如果它被驅逐或沒有被放過,我會認爲它已經過期,並且這沒有問題。問題是 - 使用memcache處理可能無法訪問的數據可以嗎? 關於mongodb-我們現在沒有使用它。你建議開始使用它來滿足這些臨時數據要求,還是繼續使用mysql? – ctor

+1

如果您正在大量使用memcache,並且memcache的利用率大約爲75%(這意味着您的memcache已滿),那麼我會建議不要使用memcache。由於非常高的可能性,數據將被快速清除,因爲它不被使用。如果即使這不是你的問題,那麼你可以使用memcache。 如果這是唯一的要求,那麼我會建議不要使用mongodb,因爲它會涉及學習一個新的堆棧。只要去與MySQL。運行一項每天都會刪除不需要的行的作業,以便數據不會持續增長。 – pratikvasa

+0

更好地在回答中添加此使用部分! – ctor