Memcahced是一個開源分布式內存對象緩存系統。稍微大一點的項目經常會使用 Memcached 以減少數據庫的負擔,從而加速web應用的響應速度。網絡上有大量關於 Memcached 安裝的方法以及使用介紹,本文所要說的就是其實 memcached 很簡單,沒有想象的那麼神秘,我們可以簡單的理解為它就是一個緩存服務器應用程序,就像是你裝了個 Mysql 一樣,裝好了之後用賬號密碼IP地址連一下就能使用。
首頁簡單的介紹一下 memcached 的原理
第一次用戶發送請求,PHP程序會在訪問db數據庫的同時,將訪問的數據寫入Memcached系統。
如圖所示,user發送了req請求,application發送數據請求到database,database在將數據返回給application的同時,將數據緩存到了Memcached服務器。
第二次用戶請求到達,會直接讀取Memcached服務器的緩存,而不是數據庫中的內容,從而減輕了服務器的負擔。
本圖顯示,第二次的請求,application直接從Memcached(簡稱Mc)讀取數據。
下面通過一個實例分享一下 memcached 的基本使用方法(類似友情鏈接的一個開發實例)。相信通過這個實例,你就能很清楚的理解了這個東東。
下面的案例假設你已經安裝好了 memcached 服務,如果沒有安裝的話,請參考本站:
memcached是什麼?memcache該何使用?
windows系統下安裝memcache
(1)新建一個數據庫
實例中使用的數據庫表包含一個自增的id,一個標題和一個鏈接字段:
CREATE TABLE demos( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(300), link VARCHAR(300), );
(2)程序部分(程序的注釋會讓你很輕松的理解 memcached 的使用)
<?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>'; } ?>
下面是用於連接數據庫的代碼文件 db.php
<?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"); ?>