1、Memcached介紹 php
一、什麼是Memcached? mysql
Memcached是國外社區網站LiveJournal的開發團隊開發的高性能的分佈式內存緩存服務器。通常的使用目的是,經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、提升可擴展性。 sql
官方網站:http://memcached.org/ shell
二、Memcached的運行圖 數據庫
2、Memcached安裝和使用 apache
一、Memcached安裝 數組
安裝步驟:先安裝libevent,再安裝Memcached主程序 緩存
安裝libevent: 服務器
yum –y install libevent*
再安裝Memcached: 分佈式
tar -xzf memcached-1.4.10.tar.gz cd memcached-1.4.10 ./configure --prefix=/usr/local/memcache make && make install useradd memcache passwd memcache
二、 Memcached運行
啓動Memcached:
/usr/local/memcache/bin/memcached -p 11211 -u memcache &
關閉服務:
kill %1 #1表示爲後臺服務的數字標識
查看Memcached幫助信息:
/usr/local/memcache/bin/memcached –h
檢查是否正常啓動:
ps –aux | grep memcached 或 netstat –tunpl | grep :11211 或 telnet 192.168.10.1 11211 #測試鏈接狀態 stats #統計Memcached的各類信息
三、Memcached和PHP結合使用
(1)、須要安裝PHP Memcache擴展
編譯安裝memcache
tar zxvf memcache-2.2.5.tgz cd memcache-2.2.5 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
配置:
ls -l /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/memcache.so vi /usr/local/php/etc/php.ini
新增如下配置內容:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" extension="memcache.so"
檢查安裝結果:
/usr/local/php/bin/php –m /usr/local/apache2/bin/apachectl restart
(2)、PHP和Memcache結合的測試代碼
<?php //鏈接memcache $mem = new Memcache; $mem->connect('localhost',11211); //保存數據 $mem->set('key1','this is first value',0,60); $val = $mem->get('key1'); echo "Get key1 value:".$val."<br/>"; //替換數據 $mem->replace('key1','this is replace value',0,60); $val = $mem->get('key1'); echo "Get key1 value:".$val."<br/>"; //保存數組數據 $arr = array('aa','bb','cc'); $mem->set('key2',$arr,0,60); $val2 = $mem->get('key2'); echo "Get key2 value:"; echo "<pre>"; print_r($val2); //關閉鏈接 $mem->close(); ?>
(3)、PHP和Memcache分佈式:在一臺或者多臺機器啓用一個或者多個進程,這裏是在一臺機器啓用兩個進程,使用兩個接口:
/usr/local/memcache/bin/memcached –u memcache –p 11211 & /usr/local/memcache/bin/memcached –u memcache –p 11212 & /usr/local/memcache/bin/memcached –u memcache –p 11213&
示例代碼:
<?php //鏈接memcache $mem = new Memcache; $mem->addServer('localhost',11211); $mem->addServer('localhost',11212); $mem->addServer('localhost',11213); //保存數據 $mem->set('key1','this is first value',0,60); $val = $mem->get('key1'); echo "Get key1 value:".$val."<br/>"; //替換數據 $mem->replace('key1','this is replace value',0,60); $val = $mem->get('key1'); echo "Get key1 value:".$val."<br/>"; //保存數組數據 $arr = array('aa','bb','cc'); $mem->set('key2',$arr,0,60); $val2 = $mem->get('key2'); echo "Get key2 value:"; echo "<pre>"; print_r($val2); echo "</pre>"; //關閉鏈接 $mem->close(); ?>
另外,PHP做爲memcached客戶端實現起來很簡單,在實際應用中,一般會把數據庫查詢的結果集保存到 memcached 中,下次訪問時直接從 memcached 中獲取,而再也不作數據庫查詢操做,這樣能夠在很大程度上減輕數據庫的負擔。一般會將 SQL 語句 md5() 以後的值做爲惟一標識符 key。
下邊是一個利用 memcached 來緩存數據庫查詢結果集的示例:
<?php $mc = new memcached(); $sql = 'SELECT * FROM users'; $key = md5($sql); //memcached 對象標識符 if ( !($datas = $mc->get($key)) ) { // 在 memcached 中未獲取到緩存數據,則使用數據庫查詢獲取記錄集。 echo "n".str_pad('Read datas from MySQL.', 60, '_')."n"; $conn = mysql_connect('localhost', 'test', 'test'); mysql_select_db('test'); $result = mysql_query($sql); while ($row = mysql_fetch_object($result)) $datas[] = $row; // 將數據庫中獲取到的結果集數據保存到 memcached 中,以供下次訪問時使用。 $mc->add($key, $datas); } else { echo "n".str_pad('Read datas from memcached.', 60, '_')."n"; } var_dump($datas); ?>