對於異動性不高但卻需要大量讀取這些儲存在資料庫的資料時,有沒有什麼方法可以減少對資料庫存取時所秏的資源。
使用 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();
?>
其他的參考資料。請見















