MEMCACHED 內存緩存php
是高效、快速的分佈式內存對象緩存系統,主要用於加速web應用程序。mysql
主要用來提高讀取速度,是一個高性能的分佈式內存對象緩存系統,用於動態web應用以減輕數據庫負載,經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提升動態、數據庫驅動網站的速度,memcached基於一個存儲鍵/值對的hash表。web
首先 下載 memcached-client.php,在下載了 memcached-client.php 以後,就能夠經過這個文件中的類「memcached」對 memcached 服務進行操做了。其實代碼調用很是簡單,主要會用到的方法有 add()、get()、replace() 和 delete(),方法說明以下:sql
add($key,$val,$exp = 0)數據庫
往memcached中寫入對象,¥key是對象的惟一標識符,¥val是寫入對象數據,$exp是爲過時時間,單位爲秒,默認爲不限時間。數組
get($key)緩存
從memcached 中讀取對象數據,經過對象的惟一標識符$key獲取;dom
replace($key,$val,$exp = 0)分佈式
使用$val 替換memcached中標識符$key的對象內容。參數和add()方法同樣,只有$key存在才起做用。memcached
delete($key,$time = 0);
刪除memcached 中標識符爲$key的對象,$time爲可選參數,表示刪除以前須要等待多長時間。
下面是一段簡單的測試代碼,代碼中對標識符爲 'mykey' 的對象數據進行存取操做:
<?php // 包含 memcached 類文件 require_once('memcached-client.php'); // 選項設置 $options = array( 'servers' => array('192.168.1.1:11211'), //memcached 服務的地址、端口,可用多個數組元素表示多個 memcached 服務 'debug' => true, //是否打開 debug 'compress_threshold' => 10240, //超過多少字節的數據時進行壓縮 'persistant' => false //是否使用持久鏈接 ); // 建立 memcached 對象實例 $mc = new memcached($options); // 設置此腳本使用的惟一標識符 $key = 'mykey'; // 往 memcached 中寫入對象 $mc->add($key, 'some random strings'); $val = $mc->get($key); echo "n".str_pad('$mc->add() ', 60, '_')."n"; var_dump($val); // 替換已寫入的對象數據值 $mc->replace($key, array('some'=>'haha', 'array'=>'xxx')); $val = $mc->get($key); echo "n".str_pad('$mc->replace() ', 60, '_')."n"; var_dump($val); // 刪除 memcached 中的對象 $mc->delete($key); $val = $mc->get($key); echo "n".str_pad('$mc->delete() ', 60, '_')."n"; var_dump($val); ?>
是否是很簡單,在實際應用中,一般會把數據庫查詢的結果集保存到 memcached 中,下次訪問時直接從 memcached 中獲取,而再也不作數據庫查詢操做,這樣能夠在很大程度上減輕數據庫的負擔。一般會將 SQL 語句 md5() 以後的值做爲惟一標識符 key。下邊是一個利用 memcached 來緩存數據庫查詢結果集的示例(此代碼片斷緊接上邊的示例代碼):
<?php $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); ?>