इस प्रश्न का शीर्षक इतना स्पष्ट नहीं है, लेकिन कोड और प्रश्न सरल है।memcached: जो तेज़ है, एक जोड़ (और जांच परिणाम) कर रहा है, या एक प्राप्त कर रहा है (और झूठी लौटने पर सेट)
मान लें कि मैं प्रतिदिन एक बार अपने उपयोगकर्ताओं को एक विज्ञापन दिखाना चाहता हूं। इसे पूरा करने के लिए, हर बार जब वे मेरी साइट पर किसी पृष्ठ पर जाते हैं, तो मैं यह देखने के लिए जांच करता हूं कि किसी निश्चित मेमकेचे कुंजी पर कोई डेटा संग्रहीत है या नहीं। यदि ऐसा है, तो विज्ञापन न दिखाएं। यदि नहीं, तो 86400.
की एक समय समाप्ति के साथ कि कुंजी में मूल्य की दुकान '1' मैं इस 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
}
, यह स्पष्ट लग सकता है कि ख बेहतर है, यह हमेशा बना देता है 1 memcache कॉल। हालांकि, "ऐड" बनाम "प्राप्त करें" का ओवरहेड क्या है? ये वास्तविक तुलना नहीं हैं ... और मैंने अभी इन नंबरों को बनाया है, लेकिन मान लें कि 1 जोड़ने ~ = 1 सेट ~ = 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
यदि कैश एक संतुलित संतुलित बी-पेड़ है, तो कुंजी को संयोजित करने का प्रयास शायद लुकअप के प्रयास को बौछार करता है। और पृष्ठ की सेवा करने का प्रयास शायद यह कोड ब्रह्माण्ड नहीं होने पर आकाशगंगा आकाशगंगा को देखते समय ग्रह पृथ्वी की तरह दिखता है। –