雨後的天空

三月 26, 2008

使用Memcache

分類於 記事 — mayshih @ 4:47 午後
Tags: , ,

對於異動性不高但卻需要大量讀取這些儲存在資料庫的資料時,有沒有什麼方法可以減少對資料庫存取時所秏的資源。

使用 Cache 是解決方法的其中一種。

好比你部落格發表的文章,寫完了,發表後,除非有錯字或錯誤需要做更正外,最多的情況,就是當有大量的網友讀取這篇文章,這時對資料庫所做的就是單純的 Select ,為了減少對資料庫讀取的頻率,先將 Select 出來的資料,設個 Key(可以是文章編號),存到 Memery Cache中,當有下位網友也要讀同一篇文章時,先用同一個Key去Memcache 中找找看,有沒有該筆資料,如果有,就直接丟出去。如果沒有,再到資料庫去找,找到後再設Key存到 Memery Cache去,這樣可以減少對資料庫的 Loading。

這裡寫出,用 Php 要如何去連結 Memcache Server,用Key找資料、或用Key將資料存在、刪除等。。。

<?php
$memcache = new Memcache;

//在這裡指定你所要連接Server的IP、和Port

$memcache->addServer(‘127.0.0.1′, 11211);
//取得連接的狀態

echo “Server’s status : “.$memcache->getServerStatus(‘127.0.0.1′, 11211);

//取得所使用的Memcache Server是何種版本

echo “Server’s version: “.$memcache->getVersion().”<BR>”;

//假設我blog文章編號是

$key = ‘3344111′;

echo “先從 Cache 中找找看有沒有資料<BR>”;

$get_result = $memcache->get($key);

// 如果沒有資料,先找出來
if ( !($datas = $memcache->get($key)) ) {

//如 memcached 沒找到資料,去查資料庫

echo “要儲存的資料:<BR>”;

//這裡我用 Postgre SQL ,您可以改成您所使用的DB

$conn = pg_connect (“host=localhost port=5432 dbname=sns user=postgres password=123456″);

$sql = ‘SELECT * FROM blogs where blog_id = ‘.$key;

$result = pg_query($sql);

while ($row = pg_fetch_object($result)){

$datas[] = $row;

}

//將資料庫查到的資料存到 memcached中,供下次使用

memcache->set($key, $datas, false, 10);

echo “將資料存入 Cache 中 (10 秒後失效)<BR>”;

} else {

echo “從 Cache 中取回資料<BR>”;

$get_result = $memcache->get($key);

var_dump($get_result);

}

//如果要從memcache 中,移除資料的話

$memcache->delete($key);

//最後把connection關掉

$memcache->close();

?>

其他的參考資料。請見

程式下載 

在WordPress.com寫網誌.