使用PHP創(chuàng)建Memcached數(shù)據(jù)庫客戶端
Memcached 是一個鍵值存儲系統(tǒng),它將關(guān)鍵數(shù)據(jù)存儲在內(nèi)存中,大大減少存取數(shù)據(jù)的時間。使用Memcached的好處不言而喻,它不僅減少了系統(tǒng)訪問數(shù)據(jù)庫的壓力,而且提高系統(tǒng)的反應(yīng)速度。至于什么樣的系統(tǒng)需要使用memcache,筆者建議數(shù)據(jù)量大,訪問頻繁系統(tǒng)可以采取Memcached作為緩存的中間層。
使用Memcached的缺點除了增加程序的代碼量,還有就是不能保證數(shù)據(jù)庫的實時性,另外在第一次初始化數(shù)據(jù)庫會需要額外的時間。但是這些的缺點比起它的優(yōu)點是很微不足道。
PHP帶有操作Memcached的擴(kuò)展,它提供一組函數(shù)來操作Memcached服務(wù)器,將他們簡單分一下類:
1。Memcached的連接函數(shù)(connect, pconnect)
2。memcahced的操作函數(shù)(set, get, delete, replace, flush)
3。多服務(wù)器配置函數(shù)(addServer)
4。狀態(tài)監(jiān)控函數(shù)(getStats.....)
下面摘一段代碼,給大家一個直觀的印象:(假設(shè)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服務(wù)器,設(shè)置值,取值('Key'的值是'Value');
這里需要向大家說明一下addServer函數(shù)和connect函數(shù),addServer是將多個服務(wù)器放在連接池,而connect只是將連接某一臺服務(wù)器;如果在使用了addServer,再使用connect,這里就會只使用一臺服務(wù)器。
介紹了Memcached的使用后,下面向大家介紹如何編寫自己的PHP Memcached的客戶端。
Memcached是一個服務(wù)器端程序,我們自然可以使用PHP中的套接字程序來連接,并進(jìn)行相應(yīng)的通訊,完成數(shù)據(jù)的存儲操作。要使用PHP和Memcached通訊,首先需要知道Memcached的通訊協(xié)議,相關(guān)的信息可以在Memcached的源碼的doc/protocol.txt中找到。
這里筆者使用get命令向大家展示一下這個過程
這個命令主要是從數(shù)據(jù)中提取數(shù)據(jù),輸入格式: get key\r\n
如果服務(wù)器沒有這個值,則返回: END\r\n
如果這個值存在,返回: VALUE key <標(biāo)記> <數(shù)據(jù)長度> \r\n 數(shù)據(jù)塊\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打開服務(wù)器的socket通訊接口,然后向其發(fā)送get key命令, 然后獲取返回的數(shù)據(jù),并解析返回的數(shù)據(jù)。這里都沒有做異常的處理,在編程的時候要填上。
延伸閱讀
Memcached 是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負(fù)載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提供動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。Memcached基于一個存儲鍵/值對的hashmap。其守護(hù)進(jìn)程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護(hù)進(jìn)程通信。但是它并不提供冗余(例如,復(fù)制其hashmap條目);當(dāng)某個服務(wù)器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。
Memcached由Danga Interactive開發(fā),用于提升LiveJournal.com訪問速度的。LJ每秒動態(tài)頁面訪問量幾千次,用戶700萬。Memcached將數(shù)據(jù)庫負(fù)載大幅度降低,更好的分配資源,更快速訪問。
原文標(biāo)題:使用php操作memcached
鏈接:http://www.cnblogs.com/kucongzhi/archive/2010/07/11/1775275.html
【編輯推薦】