1. 程式人生 > >分散式快取Memcached/memcached/memcache詳解及區別

分散式快取Memcached/memcached/memcache詳解及區別

本文轉自  http://www.ruesin.com/system/server/memcached-184.html

先來解釋下標題中的三種寫法:首字母大寫的Memcached,指的是Memcached伺服器,就是獨立執行Memcached的後臺伺服器,用於儲存快取資料的“容器”。memcached和memcache是Memcached的客戶端,通過二者訪問Memcached伺服器,向容器存取資料。兩者用途一致,但在用法上有稍微差異。

一、Memcached
Memcached 是一個高效能分散式的記憶體物件快取系統,通過快取資料庫查詢結果,減少資料庫訪問次數,減少資料庫的負載壓力,提高動態web應用的效能。

Memcached 是以守護程式方式運行於一個或多個伺服器中,隨時接受客戶端的連線操作,客戶端與 Memcached 服務建立連線,根據請求存取物件,每個被存取的物件都有一個唯一的識別符號 key,存取操作均通過這個 key 進行,儲存到 Memcached 中的物件實際上是放置記憶體中的,並不是儲存在 cache 檔案中的,所以 Memcached 存取資料非常高效。注意,這些物件並不是持久的,服務停止之後,裡邊的資料就會丟失。

Memcached本身基於分散式的系統,可獨立於網站應用本身,很容易實現伺服器間資料共享。在 Memcached 中可以儲存的item資料量是沒有限制的,只有記憶體足夠。Memcached單程序最大使用記憶體為2G,要使用更多記憶體,可以分多個埠開啟多個Memcached程序,進行分散式搭建,畢竟單臺Memcache的記憶體容量的有限的。

但是那些不需要“分佈”的,不需要共享的,或者乾脆規模小到只有一臺伺服器的應用,Memcached不會帶來任何好處,相反還會拖慢系統效率,因為網路連線同樣需要資源。

由於 Memcache伺服器端都是直接通過客戶端連線後直接操作,沒有任何的驗證過程,這樣如果伺服器是直接暴露在網際網路上的話是比較危險,所以 Memcached 應放在防火牆裡面。

二、memcached 和 memcache 的區別
memcache最早是在2004年2月開發的,而memcached最早是在2009年1月開發的。所以memcache的歷史比memcached久。那是不是可以這麼理解: memcached 是 memcache 的升級版?

安裝memcache擴充套件,直接匯入擴充套件,更改下php.ini即可。但是在安裝memcached的時候,你要先安裝libmemcached,libmemcached是memcache的C客戶端,它具有的優點是低記憶體,執行緒安全等特點。在高併發下,穩定性比memcache有明顯提高。

memcache的方法特別少,只有很少一部分基本的操作方法,比 memcached 少很多,具體的可以查詢官方手冊。

所以總的來說,二者是沒有太多其他區別的,只不過是 memcached 比 memcache 多了一些對守護程序的操作方法,效能更好一些。

Ruesin's Blog

三、三者關係描述
Memcached 就比如是一個水庫(容器),memcache 是一個塑料管,memcached 是一個PVC管。我們可以通過塑料管或者PVC管為水庫上水或者取水,用哪種方式因人而異,而PVC管在輸送水的效率上明顯比塑料管快,而且可以裝閥門、開口做分支等等,比塑料管的花樣多。

說 Memcached 是服務端,很多人都會攪渾這個概念,說memcache不就是裝在伺服器上的麼,不也是服務端麼? Memcached 是可以獨立在web伺服器之外的任何伺服器,甚至可以是叢集,而說它是服務端,其實是相對的概念,相對與web伺服器的memcache來說是服務端,memcache所在的web伺服器相對與使用者PC機來說又是服務端。

文章來自ruesin.com

======================

• 在 Memcached 中可以儲存的item資料量是沒有限制的,只有記憶體足夠
• Memcached單程序最大使用記憶體為2G,要使用更多記憶體,可以分多個埠開啟多個Memcached程序
• 最大30天的資料過期時間, 設定為永久的也會在這個時間過期,常量REALTIME_MAXDELTA 60*60*24*30 控制
• 最大鍵長為250位元組,大於該長度無法儲存,常量KEY_MAX_LENGTH 250 控制
• 單個item最大資料是1MB,超過1MB資料不予儲存,常量POWER_BLOCK 1048576 進行控制,它是預設的slab大小
• 最大同時連線數是200,通過 conn_init()中的freetotal 進行控制,最大軟連線數是1024,通過settings.maxconns=1024 進行控制
• 跟空間佔用相關的引數:settings.factor=1.25, settings.chunk_size=48, 影響slab的資料佔用和步進方式