所以我剛開始使用Memcache。我準備寫一些代碼,但是我有一個優化問題:我應該避免建立MySQL連接(使用Memcache時)還是建立連接?
我不知道是否應該儘可能延遲建立MySQL連接(並且可能沒有建立一個連接,當一切都可以從Memcache中讀取時)或者無論如何建立它,以節省我的編碼時間,基於這樣的想法,不是連接,而是實際的查詢使我的服務器的CPU變得瘋狂。
所以,我有這兩個代碼示例之間做出選擇:
1 - 連接到MySQL反正
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("MEMCACHE: Could not connect!");
$db = mysql_connect('localhost', 'user', 'password') or die ("MySQL: Could not connect!");
mysql_select_db('database');
$sql = "SELECT id FROM table LIMIT 1";
$key = md5('query'.$sql);
//lookup value in memcache
$result = $memcache->get($key);
//check if we got something back
if($result == null) {
//fetch from database
$qry = mysql_query($sql) or die(mysql_error()." : $sql");
if(mysql_num_rows($qry)> 0) {
$result = mysql_fetch_object($qry);
//store in memcache for 60 seconds
$memcache->set($key,$result,0,60);
}
}
2 - 只要連接到MySQL,因爲它需要
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("MEMCACHE: Could not connect!");
$sql = "SELECT id FROM table LIMIT 1";
$key = md5('query'.$sql);
//lookup value in memcache
$result = $memcache->get($key);
//check if we got something back
if($result == null) {
if(!$db){
$db = mysql_connect('localhost', 'user', 'password') or die ("MySQL: Could not connect!");
mysql_select_db('database');
}
//fetch from database
$qry = mysql_query($sql) or die(mysql_error()." : $sql");
if(mysql_num_rows($qry)> 0) {
$result = mysql_fetch_object($qry);
//store in memcache for 60 seconds
$memcache->set($key,$result,0,60);
}
}
這種效果並不理想,如果將數據存儲在memcache中,則至少可以爲您的站點提供只讀版本(假設您大多數都具有讀取),並且只有在寫入完成時纔會顯示錯誤,這是更優選的。至於網站正在啓動,您應該對您的服務器進行某種監控。 – Aviatrix