2012-02-09 56 views
14

我有一個Debian服務器,有大約16GB的RAM,我使用的是nginx和幾個沉重的mysql數據庫以及一些自定義的php應用程序。我想在Mysql和PHP之間實現一個內存緩存,但是數據庫太大而無法將所有內容存儲在RAM中。就我研究而言,我認爲LRU緩存可能會更好。這是否排除Redis? Couchbase也是一個考慮因素。Memcached,Redis或Couchbase

回答

15

假設有一個運行nginx + php + mysql實例的獨特服務器,其餘一些可用的RAM,使用該RAM緩存數據的最簡單方法就是增加mysql實例的緩衝區緩存。數據庫已經使用類似LRU的機制來處理它們的緩衝區。

現在,如果您需要將部分處理從數據庫中移走,那麼預緩存可能是一個選項。在討論memcached/redis之前,如果僅考慮一臺服務器(實際上比redis/memcached更有效),則與php等集成的共享內存緩存(如APC)將會更加高效。

memcached和redis都可以被認爲是執行遠程緩存(即共享各個節點之間的緩存)。我不排除redis:它可以很容易地配置爲此目的。兩者都將允許定義一個內存限制,並使用類似LRU的行爲處理緩存。然而,我不會在這裏使用couchbase,這是一個彈性的(即應該在幾個節點上使用)NoSQL鍵/值存儲(即不是緩存)。你可能會將一些數據從你的mysql實例移動到一個couchbase集羣,但僅僅用於緩存就是過度工程IMO。

+0

我已經使用了APC,但是我們在web應用中使用的php cli腳本無法訪問相同的數據。這就是memcached成爲下一個邏輯步驟的第一步。我正在研究couchbase,因爲我認爲它是一個非易失性(如果需要的話)或多或少地用於memcached的替代品。 – Poe 2012-02-10 12:04:16

+19

Couchbase應該被考慮,因爲它具有簡單的舊memcached操作模式(稱爲桶),但使管理更容易,管理統計等。完全公開:我爲Couchbase工作。 – 2012-03-09 01:54:15

1

我們使用memcached的最初緩存data.In memcahed分區數據不同鬥下的不同應用程序是一個真正的issue.Also我們有一個要求,以刷新一個桶alone.Monitoring數據被另一個requirement.We移到CouchBase數據並使用memcahed風格的bucket.i猜測它使用couchbase memcache風格存儲區進行緩存而不是使用memcahe更加靈活和高效。

+0

這是緩存/內存緩存用戶遷移到Couchbase的常用用例(使用memcache存儲區,有時使用Couchbase存儲區)。我邀請您查看http://www.couchbase.com/memcached – 2013-01-17 09:27:52

0

正如Matt Ingenthron指出的那樣,Hari指出Couchbase支持作爲Memcached的直接替代品。 Couchbase以非彈性方式利用memcached,因爲參與memcache集羣的每個節點都是謹慎的,沒有持久性,即只是一個緩存,但couchbase也提供了確保持久性的「Couchbase」存儲區類型。 Membase也是代碼的一部分,因此Couchbase不僅可以從磁盤提供數據,還可以從RAM提供數據,並在複製到其他節點時將其持久存在,並在應用更改時保存到磁盤。如果您只是希望緩存層與持久層分離,我強烈推薦Couchbase 3.x用於一個腳本中的緩存和持久性,或者多個腳印。

1

您是否曾考慮過使用持久性內存中的NoSQL解決方案之一將數據庫完全移到RAM中?它可能需要比原始MySQL數據庫更少的存儲空間,因爲許多NoSQL解決方案通常佔用的空間比SQL數據庫少。此外,如果服務器端邏輯對您來說非常重要,那麼嘗試使用Tarantool,因爲它具有Lua腳本,並且應該佔用很小的內存空間。在我的情況下,Tarantool中的相同數據比MySQL中少了兩倍。這是因爲它們每行和每個字段的開銷很小,並且使用messagepack進行數據存儲。

相關問題