memcache 和 memcached 的區別分析

前言:

其實之前 LZ 有簡單和學習和使用過 memcache ,但是也僅僅限於簡單層面。然後最近要使用到 memcache,所以重新溫習了一遍,在這裏簡單總結一下關於 memcache 和 memcached 的區別,大神路過就別踩了。。。

區別分析:

其實我們這裏所說的 memcache 和 memcached 說的是 PHP 的擴展,假如我們要在 PHP 中使用 memcache ,我們肯定是先在服務器上安裝 memcache 服務,然後爲 PHP 安裝對應的擴展,這樣我們才能用 PHP 代碼控制 memcache,那麼安裝完之後我們 echo phpinfo(); 會發現:

這裏寫圖片描述

(連歌詞都上去了-_-!!)

這裏我們要討論的就是圖片上顯示的 memcache 和 memcached:

1、memcache最早是在2004年2月開發的,最後更新是在2013年4月,而 memcached 最早是在2009年1月開發的,最後更新是在2014年1月更新的。因此 memcache的歷史 比 memcached 早。更多信息大家可以參考:

memcache:http://pecl.php.net/package/memcache
memcached:http://pecl.php.net/package/memcached

2、 memcache 是一個原生版本,完全是在 PHP 框架內開發的,支持 OO(面向對象) 和非 OO 兩套接口並存,而 memcached 是建立在 libmemcached 的基礎上的,只支持 OO 接口。這就意味着在安裝 memcache 擴展的時候不要求安裝其他的東西,但是在安裝 memcached 的時候會要求你安裝 libmemcached。別嫌麻煩!因爲 libmemcached 是 memcache 的 C 客戶端,它具有低內存,線程安全等優點。據說新浪微博之前就全面將 PHP 的 memcache 替換成 PHP 的 memcached,在高併發下,穩定性果斷提高。

3、memcached 有個比較 nice 的地方,就是 flag 不是在操作的時候設置的,而是有一個統一的 setOption() 函數進行設置,我們可以舉添加緩存數據爲例子:

#memcache:
bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

#memcached:
public bool Memcached::add ( string $key , mixed $value [, int $expiration ] )

從上面各自的 add 方法可以看到,memcache 的 add 方法中的第三個參數代表是否對數據進行壓縮,這樣假如說我的緩存需要設置過期時間,但是 flag 參數在前面,我就得每一次都對 flag 進行設置!
而 memcached 中是使用 setOption() 來進行統一設置的(默認開啓壓縮)。

4、memcached 比 memcache 支持更多的 memcache 協議,大概也就是說 memcached 有更多的方法,比如 getMulti() 和 setMulti() 函數非常有用,但是 memcache 並不支持。
更多的方法大家可以看PHP的官方手冊:
memcache:http://php.net/manual/zh/book.memcache.php
memcached:http://php.net/manual/zh/book.memcached.php

5、差別比較大的一點是,memcached 支持 Binary Protocol,而 memcache 不支持,這意味着 memcached 會有更高的性能。但是網上很多博客說 memcached 不支持長連接,這其實不然,大家看官方手冊:http://php.net/manual/zh/memcached.construct.php

這裏寫圖片描述

上面明確的提出,當使用長鏈接的時候。。。。。因此 memcached是能夠實現長連接的。

6、比較尷尬的一點是 memcached 和 memcache 對應的服務端名字都是 memcached,大家使用 ps aux | grep memcache 就會發現守護進程的名字是 memcached(我的環境是 ubuntu),其實後面的 d 可以理解爲守護進程,因此網上有的人說 memcache 是客戶端, memcached 是服務端就是這個意思,同學們不要將客戶端的 memcached 和服務端的 memcached 混淆了就好。

7、兩者在實現某些相同功能時所使用的算法也是有一定差異的,由於內容比較深,我也不太懂。。。。。

總結

1、本篇博客參考了很多網上的資料,加上自己的理解總結出來的。

2、從上面的分析也可以得出一個結論:memcached 比 memcache 好,因此在以後的開發過程中,大家儘量使用 memcached。

發佈了75 篇原創文章 · 獲贊 171 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章