http://www.crazyant.net/1014.htmlphp
Memcahced開源分佈式內存對象緩存系統經過減小數據庫的負擔,從而可以加速你的web應用。在本文中我將解釋怎樣實現一個基於Memcahced的緩存系統。html
實例中使用的數據庫表包含一個自增的id,一個標題和一個連接字段:mysql
1
2
3
4
5
6
|
CREATE TABLE demos
(
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(300),
link VARCHAR(300),
);
|
第一次用戶發送請求,PHP程序會在訪問db數據庫的同時,將訪問的數據寫入Memcached系統。git
如圖所示,user發送了req請求,application發送數據請求到database,database在將數據返回給application的同時,將數據緩存到了Memcached服務器。github
第二次用戶請求到達,會直接讀取Memcached服務器的緩存,而不是數據庫中的內容,從而減輕了服務器的負擔。web
本圖顯示,第二次的請求,application直接從Memcached(簡稱Mc)讀取數據。sql
網絡上有大量關於Memcached安裝的方法,其實它就是一個緩存服務器應用程序,意思就像是你裝了個Mysql同樣,裝好了用帳號密碼IP地址連一下就能使用。數據庫
如下是一些很好的資源:apache
php_memcache.dllwindows
在Windows7的Xampp上安裝Memcached的方法
在Windows7上的PHP5.3安裝Memcached的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?php
include('db.php');
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
//緩存服務器中,都是鍵值對,這裏咱們設定惟一的鍵
$key = md5('www.crazyant.net');
$cache_result = array();
//根據鍵,從緩存服務器中獲取它的值
$cache_result = $memcache->get($key);
//若是存在該鍵對應的值,說明緩存中存在該內容
if($cache_result){
//那咱們直接取出緩存的內容就能夠了
$demos_result=$cache_result;
} else {
//若是緩存中沒有該鍵對應的值數據,說明請求是第一次到達
//首先,咱們須要從數據庫中取出該值
$v=mysql_query("select * from demos order by id desc");
while($row=mysql_fetch_array($v)){
//取出的內容就是咱們須要的
$demos_result[]=$row;
}
//最後,將此次從數據庫取出的內容,放到Memcached緩存服務器,這裏就是緩存的精髓
$memcache->set($key, $demos_result, MEMCACHE_COMPRESSED, 1200);
}
//前面的全部操做,最終返回了咱們須要的數據
// foreach($demos_result as $row){
echo '<a href='.$row['link'].'>'.$row['title'].'</a>';
}
?>
|
你須要改變代碼中的IP地址、用戶名、密碼、數據庫名字。
1
2
3
4
5
6
7
8
9
|
<?php
$mysql_hostname = "localhost";
$mysql_user = "username";
$mysql_password = "password";
$mysql_database = "database";
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password)
or die("Opps some thing went wrong");
mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong");
?>
|
注:本文參考Memcached with PHP
關於Windows7 下面安裝memcached和php的memcache擴展
http://blog.sina.com.cn/s/blog_61d0b6cd0100w9qq.html
Php代碼與memcached的交互和與mysql的交互原理是同樣的,須要安裝一個服務器端的memcached ,現有的交互處理過程已經封裝成了一個php的擴展了;須要在php.ini中,將這個擴展加進去。
Php memcached官方手冊地址:http://cn2.php.net/manual/en/memcached.get.php
說說個人安裝過程:
1.個人環境:php-5.2.6. memcached-win32-1.2.6.
2. 根據下面的步驟安裝完之後,能夠去控制面板看看memcached服務是否啓動起來。若是沒有此服務須要從新安裝,若是有了,不能啓動,能夠看一下是否是路徑錯誤了。【個人就是路徑錯誤,啓動不起來。找不到指定文件。】
3.php5.2.6自帶memcache.dll文件,能夠打開phpinfo()看看有沒有memcache的擴展。若是沒有,能夠去pecl地址下載對應版本的memcache替換掉原來的。
一:下載地址:
php擴展庫pecl下載地址:
二:安裝與配置:
安裝方法一:下載之後,解壓,而後放到C盤根目錄下。雙擊memcached.exe就能夠啓動memcached服務了,這時,你能夠打開任務管理器,若是在進程裏出現memcached.exe就說明memcached服務已經啓動了,還要讓cmd窗口開着,這樣纔是啓動了memcached服務。
安裝方法二:
1.下載Windows版的memache的壓縮包
2.解壓到合適的位置如:D:memached目錄下面。
3.進入命令行切換到該目錄下面,能夠用dir看一下目錄下面的文件信息。
4. 輸入:memached.exe -d install 安裝服務器。
5. 輸入:memached.exe -d start啓動服務器,等到下次啓動系統的時候,此服務會自動啓動。默認的端口號爲11211.
配置:
1. 下載pecl模塊包(地址如上),解壓後將php_memache.dll放到php目錄的ext子目錄下,爲了使得能正常使用,最好下載和php版本一致的模塊包。
2. 在php.ini文件中導入'extension=php_memcache.dll'
而後重啓apache,估計就能夠了(能夠在phpinfo.php 中,看看是否有memcached模塊),固然了,咱們能夠寫一個實驗一下
$memcache_obj = new Memcache;
$memcache_obj->connect('localhost', 11211);
$memcache_obj->set('var_key', 'This is a memcached test!',MEMCACHE_COMPRESSED, 50);
echo $memcache_obj->get('var_key');
備註:
1)memcached 的幾個指令:
-p監聽的端口
-l鏈接的IP地址, 默認是本機
-d start啓動memcached服務
-d restart重起memcached服務
-d stop|shutdown關閉正在運行的memcached服務
-d install安裝memcached服務
-d uninstall卸載memcached服務
-u以的身份運行(僅在以root運行的時候有效)
-m 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c最大同時鏈接數,默認是1024
-f 塊大小增加因子,默認是1.25
-n 最小分配空間,key+value+flags默認是48
-h 顯示幫助
2)memcached相關的函數:
01.Memcache::add —添加一個值,若是已經存在,則返回false
02.Memcache::addServer — 添加一個可供使用的服務器地址
03.Memcache::close —關閉一個Memcache對象
04.Memcache::connect —建立一個Memcache對象
05.memcache_debug —控制調試功能
06.Memcache::decrement —對保存的某個key中的值進行減法操做
07.Memcache::delete —刪除一個key值
08.Memcache::flush —清除全部緩存的數據
09.Memcache::get —獲取一個key值
10.Memcache::getExtendedStats —獲取進程池中全部進程的運行系通通計
11.Memcache::getServerStatus —獲取運行服務器的參數
12.Memcache::getStats —返回服務器的一些運行統計信息
13.Memcache::getVersion —返回運行的Memcache的版本信息
14.Memcache::increment —對保存的某個key中的值進行加法操做
15.Memcache::pconnect —建立一個Memcache的持久鏈接對象
16.Memcache::replace — R對一個已有的key進行覆寫操做
17.Memcache::set —添加一個值,若是已經存在,則覆寫
18.Memcache::setCompressThreshold —對大於某一大小的數據進行壓縮
19.Memcache::setServerParams —在運行時修改服務器的參數
3)zend framework的cache後端支持memcached,咱們也能夠來試試看
$front = array('lifeTime' =>100,'automatic_serialization' =>true);
$back = array('server' =>array(array('host' =>'127.0.0.1','port' =>11211,'persistent' =>true)),compression =>true); //後端server是個二維數組,每一維表明一個鏈接。
$cache = Zend_Cache::factory("Core","Memcached",$front,$back);
$cache->save('This is zend memcached','zend');
echo $cache->load('zend')."<br />";
如今zend framework 的代碼,本身尚未詳細研究,等本身之後在學習的過程當中,能夠嘗試用一下;