標籤:
http://www.crazyant.net/1014.html
Memcahced開源分布式記憶體對象緩衝系統通過減少資料庫的負擔,從而能夠加速你的web應用。在本文中我將解釋怎樣實現一個基於Memcahced的緩衝系統。
資料庫
執行個體中使用的資料庫表包含一個自增的id,一個標題和一個連結欄位:
| 123456 |
CREATE TABLE demos(id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(300),link VARCHAR(300),); |
第一次使用者請求到達
第一次使用者發送請求,PHP程式會在訪問db資料庫的同時,將訪問的資料寫入Memcached系統。
,user發送了req請求,application發送資料請求到database,database在將資料返回給application的同時,將資料緩衝到了Memcached伺服器。
第二次使用者請求到達了
第二次使用者請求到達,會直接讀取Memcached伺服器的緩衝,而不是資料庫中的內容,從而減輕了伺服器的負擔。
本圖顯示,第二次的請求,application直接從Memcached(簡稱Mc)讀取資料。
Memcached的安裝方法
網路上有大量關於Memcached安裝的方法,其實它就是一個快取服務器應用程式,意思就像是你裝了個Mysql一樣,裝好了用帳號密碼IP地址連一下就能使用。
以下是一些很好的資源:
php_memcache.dll
在windows上安裝Memcached的方法
在Windows7的Xampp上安裝Memcached的方法
在Windows7上的PHP5.3安裝Memcached的方法
index.php用PHP操作Memcached的示範
| 12345678910111213141516171819202122232425262728293031323334 |
<?phpinclude(‘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>‘;} ?> |
db.php用於串連資料庫的代碼
你需要改變代碼中的IP地址、使用者名稱、密碼、資料庫名字。
| 123456789 |
<?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:
http://museum.php.net/php5/
二:安裝與配置:
安裝方法一:下載以後,解壓,然後放到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 的代碼,自己還沒有詳細研究,等自己以後在學習的過程中,可以嘗試用一下;
使用PHP串連、操縱Memcached的原理和教程