2012-06-18 141 views
20

我一直在使用Dalli直到現在緩存,今天我遇到了Redis -StoreDalli vs Redis-Store for Rails應用程序

我想知道應該切換到redisstore。我的應用程序已經使用Redis的某些東西,所以我有一個相當大的Redis服務器(在資源方面),我也有另一個memcached服務器。所以如果我在哪裏切換到redis-store,這意味着我可以刪除memcached服務器(維護更少的服務器+成本更低)。

有沒有人對這兩種解決方案進行了比較。

  1. 性能
  2. 它是一個簡易替換
  3. 任何其他的東西,我應該知道的(可隨時隨地我沒有代碼更改這兩個之間進行切換)。

回答

19

Redis可以用作緩存或作爲永久性存儲,但如果您嘗試將兩者混合使用,則最終會出現「有趣的問題」。

當你擁有memcached時,yo擁有最大的進程內存量,所以當memcached獲取滿時,它會自動刪除最近最少使用的條目,爲新條目騰出空間。

您也可以將Redis配置爲具有該行爲,但如果您將Redis用於持久存儲,則不希望這樣做,因爲在這種情況下,您可能會丟失旨在持久存儲的密鑰。

因此,如果您使用Redis的持久存儲,則需要有兩個不同的Redis進程:一個用於持久性鍵,一個用於緩存。當然,您可以始終只有一個進程併爲每個緩存項設置到期時間,但沒有人會向您保證在到期之前您沒有達到內存限制,並且會丟失數據,因此實際上您需要兩個進程。此外,如果您爲永久性數據設置主/從配置,並將緩存存儲在同一臺服務器上,則基本上會浪費RAM,因此單獨的進程是可行的。

關於性能,redis和memcached都是非常高性能的,在不同的測試中,它們在獲取/提取數據時處於相同的範圍,但是當您只需要緩存時,memcached會更好。

這是爲什麼?首先,由於memcached只有一個存儲關鍵字/值的任務,所以在存儲元數據時沒有任何開銷。另一方面,Redis提供了不同的數據結構,因此它存儲了每個關鍵字的更多元數據。其中一個例子:在Redis中將數據存儲在散列中而不是使用單獨的密鑰要便宜得多。由於只有一種類型的數據,因此您不會在memcached上獲得任何此類信息。這意味着在您的服務器中有相同數量的內存可以在memcached上存儲更多的數據,而不是redis上的數據。如果你有一個相對較小的安裝,你並不在乎,但是當你開始看到增長的時候,相信我你會想要控制這些數據。

因此,儘管我喜歡Redis,但我更喜歡爲我的緩存需求提供memcached,爲我的持久性存儲/臨時存儲/隊列需求提供redis。我仍然使用redis作爲「緩存」,但不是臨時的到期緩存,而是作爲查找緩存來保存更昂貴的存儲中的讀取。例如,我在Redis上保留用戶ID和暱稱之間的映射關係。我從來不會過期這些映射,所以Redis是一個完美的地方。

如果你正在處理少量的數據,那麼你可能有理由對所有的東西都有單一的技術,但是當你開始增長到幾百MB時,我會說去兩個都。

相關問題