Memcache是一個高性能的分佈式的內存對象緩存系統,經過在內存裏維護一個統一的巨大的hash表,它可以用來存儲各類格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。php
Memcache是danga的一個項目,最先是LiveJournal 服務的,最初爲了加速 LiveJournal 訪問速度而開發的,後來被不少大型的網站採用。html
Memcache模塊是一個高效的守護進程,提供用與內存緩存的過程式程序和麪向對象的方便的接口,特別是對於設計動態Web程序時減小對數據庫的訪問。mysql
1.下載Memcache for win32sql
http://www.php100.com/html/download/tools/2010/0125/3857.html數據庫
2.下載php_memcache.dll(php 5.3.8 memcache 擴展dll)小程序
http://hi.baidu.com/%E5%E2%E5%CB%C3%AB%C3%AB%B3%E6/blog/item/7612cf35a4425896a71e1267.htmlwindows
(Note:注意你安裝的PHP版原本下載相應的dll文件)緩存
1. 下載memcache的windows穩定版,解壓放某個盤下面,好比在c:\memcached
2. 在終端(也即cmd命令界面)下輸入 ‘c:\memcached\memcached.exe -d install’ 安裝
3. 再輸入: ‘c:\memcached\memcached.exe -d start’ 啓動。安全
4.下載php_memcache.dll,請本身查找對應的php版本的文件(放在php/ext文件夾下)
5. 在php.ini 加入一行 ‘extension=php_memcache.dll’
6.從新啓動Apache,而後查看一下phpinfo,若是有memcache,那麼就說明安裝成功!服務器
•最新的memcache pecl中,新增了一個memcache.php,這個php文件能夠用來方便的查看memcache的情況
•能夠到這裏下載源文件:http://livebookmark.net/memcachephp/memcachephp.zip
•配置詳解
•1、設置用戶名和密碼
•define(‘ADMIN_USERNAME’,'memcache’); // Admin Username
define(‘ADMIN_PASSWORD’,'password’); // Admin Password
•2、配置服務器及其端口(支持檢測多個主機的memcache)
•$MEMCACHE_SERVERS[] = ‘mymemcache-server1:11211′; // add more as an array
$MEMCACHE_SERVERS[] = ‘mymemcache-server2:11211′; // add more as an array
•更改成:$MEMCACHE_SERVERS[] = ‘127.0.0.1:11211′;
$MEMCACHE_SERVERS[] = ‘192.168.0.1:11211′;
<?php
header("Content-Type:text/html;charset=utf-8");
$db_user='root';
$db_passwd='';
$dsn="mysql:host=localhost;port=3306;dbname=test";
$memcachehost = '127.0.0.1'; //緩存服務器
$memcacheport = 11211; //緩存服務器端口
$memcachelife = 0; //緩存生命週期
$mem = new Memcache(); //實例化Memcache對象
$mem->connect($memcachehost, $memcacheport); //$mem->connect(緩存主機,緩存端口)
try
{ //異常捕捉
$pdo = new PDO($dsn, $db_user, $db_passwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'", PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
unset($db_user);
unset($db_passwd); //釋放變量,數據庫安全策略
}
catch (PDOException $e)
{
echo $e->getMessage();
exit;
}
function query_memcache($sql){
global $mem,$memcachelife;
$key = md5($sql);
if(!($value = $mem->get($key))){ //Cache中沒有,則從My SQL中查詢
echo 11 . '<br />';
$microtime1 = microtime(); //設置從數據庫取以前的時間
$query = query($sql);
while($item = mysql_fetch_array($query))
{
$result[] = $item;
}
$value = $result;
$microtime2 = microtime(); //設置從數據庫取以後的時間
//將Key和Value寫入MemCache
$mem->set($key,$result,0,$memcachelife);
$d_value = $microtime2 - $microtime1; //返回一個時間差
}
else
{
echo 22 . '<br />';
$microtime3 = microtime(); //設置從memcache中取以前的時間
$value = $mem->get($key);
$microtime4 = microtime(); //設置從memcache中取以後的時間
$d_value = $microtime4 - $microtime3; //返回一個時間差
}
echo $d_value;
return $value;
}
function query($sql)
{
if('' == $sql)
{
echo 'SQL語句錯誤:SQL語句爲空';
}
$query = mysql_query($sql);
if(!$query)
{
echo '錯誤的SQL語句';
}
return $query;
}
foreach(query_memcache("select * from test.memcache where value = 'CS133604225199978'") as $row)
{
//echo $row[0].'-'.$row[1].'<br /><br />';
}
//$mem->flush(); //刷新緩存
二、從memcache內存中取出數據,在從內存中取數據以前設置一個時間戳,在取數據以後設置一個時間戳,兩時間戳相減,返回一個時間差
在第一次運行程序時返獲得的時間差是從數據庫中取數據用的時間
之後再運行程序獲得的時間差是從內存中去數據所用的時間
能夠明顯的看出來從數據庫中取數據所用時間平均是從內存中取數據所用時間的 1000倍左右。