2012-05-26 217 views
32

我是學習memcached的初學者。 memcached服務器最讓我困惑。我可以將它看作是一臺像服務器一樣的單臺服務器計算機嗎?我也對memcached服務器和客戶端之間的關係感到困惑,他們是否位於不同的計算機上?什麼是memcached服務器

回答

49

我同意@phihag已經回答的大多數事情,但我必須澄清一些事情。

Memcached根據一個密鑰存儲數據(phihag稱它爲一個id,不要與數據庫id混淆)。數據可以具有各種大小,因此可以存儲小數據(例如從數據庫中提取1條記錄),或者可以存儲大量數據(如數百條記錄或完整的HTML頁面)。

Memcached的不是通常在同一臺計算機的應用程序服務器上使用,這樣做的原因是因爲它的目的是通過TCP使用(它會通過套接字訪問,如果它被設計在同一個工作服務器),它被設計成一個池服務器。

池化部分很有趣 - 你可以有10臺機器運行Memcached,每個機器分配最大10GB的ram用於此目的。 10 * 10 = 100GB的RAM空間。

當您向Memcached中寫入值時,只有一個(隨機或通過某些算法)的服務器存儲它。當您嘗試從Memcached中讀取值時,只有存儲該值的服務器會將其發送給您。

確實你可以把所有的數據庫/ memcached /應用程序/文件服務器放在同一臺機器上,通常你會爲你開發沙箱。但你也可以放在一個單獨的機器和兩者的任何其他組合。

如果您只需要一臺Memcached服務器,您可能會將它與託管在與應用程序代碼相同的機器上。

如果您開始使用前端緩存服務器(如清漆)或將NginX配置爲前端緩存服務器,則必須配置一些Memcached服務器以存儲這些前端緩存服務器正在緩存的數據。

如果您將數據庫分佈到多個服務器和文件服務器並存放到CDN中,這意味着您的應用程序在很短的時間內處理了大量數據,因此您需要大量無法使用的RAM空間可在一個單一的應用程序服務

而且,由於延伸的內存池的Memcached的服務器,只需添加新的服務器列表中的IP一樣容易,你會在多臺服務器水平擴展(這是Memcached的真正的典型應用)。

+2

令人驚歎的答案。這對我非常有幫助。謝謝你,還有@phihag。 –

+0

@AllenJee您能否請您將答案標記爲已接受? –

+0

Memcached服務器如何備份其數據? – trillions

22

memcached服務器是一個程序,其管理該memcached的存儲數據(不要與一個,其也可以被稱爲服務器混淆)。理論上,它可以在任何計算機上運行。但是,它通常運行在運行主應用程序的同一臺機器上。

然後,應用程序使用其memcached客戶端與memcached服務器進行通信並請求緩存的內容。這是不是從因爲

  1. 一個memcached服務器只是映射到的ID值的傳統數據庫中查詢數據的速度更快,並且永遠不需要掃描整個表
  2. memcached協議比較簡單。服務器不需要解析SQL等,客戶端也不需要製作它。
  3. 由於memcached不需要數據庫的可靠性(考慮備份,故障隔離,集羣,安全性等),它可以運行在運行應用程序的同一臺機器上。雖然您可以在運行應用程序的同一臺機器上運行數據庫,但出於上述原因,這樣做會令人不悅。
+2

非常感謝!應用程序與其memcached客戶端通信,然後客戶端請求memcached服務器獲取數據。通常,應用程序,memcached客戶端和memcached服務器位於同一臺計算機上。不同的memcached客戶端可以根據協議與其他在不同機器上運行的memcached服務器通信。上述權利? –

+1

是的,就是這樣。 – phihag

+1

我可以將它們分成兩部分嗎?一個是包含應用程序,memcached客戶端和memcached服務器的Web服務器。另一個是數據庫服務器。 –