使用PHP串連、操縱Memcached的原理和教程

來源:互聯網
上載者:User

標籤:

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的原理和教程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.