這個問題的標題不是很清楚,但代碼和問題很簡單。memcached:這是更快,做一個添加(和檢查結果),或做一個get(並在返回false時設置)
比方說,我想每天向用戶展示一次廣告。要做到這一點,每次他們訪問我網站上的一個頁面時,我都會檢查一下某個memcache密鑰是否存儲了任何數據。如果是這樣,請不要展示廣告。如果不是,在這關鍵的存儲值「1」與86400
到期,我可以做到這2種方式:
//version a
$key='OPD_'.date('Ymd').'_'.$type.'_'.$user;
if($memcache->get($key)===false){
$memcache->set($key,'1',false,$expire);
//show ad
}
//version b
$key='OPD_'.date('Ymd').'_'.$type.'_'.$user;
if($memcache->add($key,'1',false,$expire)){
//show ad
}
現在,它似乎很明顯b是更好的,它總是讓1個memcache調用。 但是,「添加」與「獲取」的開銷是多少?這些並不是真正的比較...我只是編了這些數字,但讓我們說1 add〜= 1 set〜= 5在努力方面得到,而普通用戶每天瀏覽5頁:
a: (5 get * 1 effort) + (1 set * 5 effort) = 10 units of effort
b: (5 add * 5 effort) = 25 units of effort
總是進行添加調用是否合理?這是不必要的微觀優化嗎?
好問題!你總是可以編寫一個快速的測試用例,運行這兩種方法10000次以獲得快速比較...... – oedo 2010-04-20 20:25:57
如果緩存是一個平衡良好的B樹,連接該鍵的工作可能會使查找工作變得更加困難。如果不是宇宙,那麼服務這個頁面的努力可能會讓這個代碼看起來像行星地球。 – 2010-04-20 20:39:17