memcached 是一個KVStore for Redis系統,它將關鍵資料存放區在記憶體中,大大減少存取資料的時間。使用memcached的好處不言而喻,它不僅減少了系統訪問資料庫的壓力,而且提高系統的反應速度。至於什麼樣的系統需要使用memcache,筆者建議資料量大,訪問頻繁系統可以採取memcached作為緩衝的中介層。
使用memcached的缺點除了增加程式的代碼量,還有就是不能保證資料庫的即時性,另外在第一次初始化資料庫會需要額外的時間。但是這些的缺點比起它的優點是很微不足道。
php帶有操作memcached的擴充,它提供一組函數來操作memcached伺服器,將他們簡單分一下類:
1。memcached的串連函數(connect, pconnect)
2。memcahced的操作函數(set, get, delete, replace, flush)
3。多伺服器配置函數(addServer)
4。狀態監控函數(getStats.....)
下面摘一段代碼,給大家一個直觀的印象:(假設memcached安裝在172.10.10.10上面,連接埠號碼12121)
$memcache = new Memcached();
$memcahce->connect('172.10.10.10', 12121);
$memcache->set('Key', 'Value');
$memcache->get('Key');
上面的主要完成了memcached的簡單操作流程:串連memcached伺服器,設定值,取值('Key'的值是'Value');
這裡需要向大家說明一下addServer函數和connect函數,addServer是將多個伺服器放在串連池,而connect只是將串連某一台伺服器;如果在使用了addServer,再使用connect,這裡就會只使用一台伺服器。
介紹了memcached的使用後,下面向大家介紹如何編寫自己的php memcached的用戶端。
memcached是一個伺服器端程式,我們自然可以使用php中的通訊端程式來串連,並進行相應的通訊,完成資料的儲存操作。要使用php和memcached通訊,首先需要知道memcached的通訊協議,相關的資訊可以在memcached的源碼的doc/protocol.txt中找到。
這裡筆者使用get命令向大家展示一下這個過程
這個命令主要是從資料中提取資料,輸入格式: get key\r\n
如果伺服器沒有這個值,則返回: END\r\n
如果這個值存在,返回: VALUE key <標記> <資料長度> \r\n 資料區塊\r\n
以下代碼是簡單類比的用戶端操作
$fp = fsocketopen('172.10.10.10', 12121, $errorno, $errstr, 1);
if(!$fp)
echo "$errstr";
else
{
$out = "get key \r\n";
fwrite($out);
while(!feof($fp))
$str . = fgets($fp);
if(stripos($str, 'END') ===0)
exit("NO value find")
$arr = implode('\r\n', $str);
echo $arr[1];
}
簡單解釋上面的代碼,使用fsocketopen開啟伺服器的socket通訊介面,然後向其發送get key命令, 然後擷取返回的資料,並解析返回的資料。這裡都沒有做異常的處理,在編程的時候要填上。