जब PHP और MySQL की बात आती है तो यहां एक आश्चर्यजनक बात है (मैं अन्य भाषाओं के बारे में निश्चित नहीं हूं) - नहीं मेमकैच्ड या रेडिस में कैशिंग सामान वास्तव में तेज़ है। काफी तेज। मूल रूप से, यदि आपने अभी-अभी अपना ऐप बनाया है और MySQL से पूछताछ की है - तो आपको इसका अधिक लाभ मिलेगा।
अब "क्यों" भाग के लिए।
InnoDB , डिफ़ॉल्ट इंजन, एक शानदार इंजन है। विशेष रूप से, यह स्मृति प्रबंधन (आवंटन और क्या नहीं) किसी भी स्मृति भंडारण समाधान से बेहतर है। यह एक सच्चाई है, आप इसे देख सकते हैं या इसके लिए मेरी बात मान सकते हैं - यह कम से कम रेडिस जितना अच्छा प्रदर्शन करेगा।
अब आपके ऐप में क्या होता है - आप MySQL को क्वेरी करते हैं और परिणाम को रेडिस में कैश करते हैं। हालाँकि, कैश्ड परिणाम रखने के लिए MySQL भी काफी स्मार्ट है। आपने अभी-अभी एक अतिरिक्त फ़ाइल डिस्क्रिप्टर बनाया है जो Redis से कनेक्ट करने के लिए आवश्यक है। आपने उस परिणाम को कैश करने के लिए कुछ स्टोरेज (RAM) का भी उपयोग किया है जिसे MySQL ने पहले ही कैश कर लिया है।
यहां एक और दिलचस्प हिस्सा आता है - PHP स्क्रिप्ट की सेवा का पसंदीदा तरीका php-fpm का उपयोग करना है - यह किसी भी mod_* . से बहुत तेज है वहाँ बकवास। मूल तक, php-fpm एक पर्यवेक्षक प्रक्रिया है जो बाल प्रक्रियाओं को जन्म देती है। स्क्रिप्ट की सेवा के बाद वे बंद नहीं होते हैं, जिसका अर्थ है कि वे MySQL से कनेक्शन कैश करते हैं - एक बार कनेक्ट करें, कई बार उपयोग करें। मूल रूप से, यदि आप php-fpm . का उपयोग करके स्क्रिप्ट परोसते हैं , वे MySQL के लिए पहले से स्थापित कनेक्शन का पुन:उपयोग करेंगे, जिसका अर्थ है कि आप प्रत्येक अनुरोध के लिए कनेक्शन खोलना और बंद नहीं करेंगे - यह अत्यंत संसाधन अनुकूल है और यह आपको MySQL से बिजली के तेज़ कनेक्शन की सुविधा देता है। MySQL, मेमोरी कुशल होने और कैश्ड परिणाम होने के कारण रेडिस की तुलना में बहुत तेज है।
अब आपके लिए इन सबका क्या अर्थ है - एक उचित सेटअप होने से आपके पास छोटा कोड होता है जो सरल, आसान होता है, जिसमें रेडिस शामिल नहीं होता है और कैश अमान्यता के साथ आपके पास होने वाली सभी समस्याओं को समाप्त कर देता है और क्या नहीं और आप बर्बाद नहीं करेंगे आपकी मेमोरी में एक ही डेटा दो बार समाहित करने के लिए।
इसके काम करने के लिए आवश्यक सामग्री:
php-fpmMySQLऔरInnoDBआधारित टेबल और सबसे बढ़कर - पर्याप्त रैम और ट्वीक किया गयाinnodb_buffer_pool_sizeचर। वह नियंत्रित करता है कि अपने उद्देश्यों के लिए कितनी रैम आवंटित करने की अनुमति है - जितना बड़ा बेहतर होगा।
आपने रेडिस को खेल से हटा दिया, आपने अपना कोड सरल और बनाए रखने में आसान रखा, आपने डेटा की नकल नहीं की, आपने खेल में अतिरिक्त सिस्टम नहीं लगाया और आपने सॉफ्टवेयर को डेटा की देखभाल करने के लिए अपना काम करने दिया। अधिकतम उपयोगिता के लिए बहुत सस्ता ट्रेड-ऑफ, भले ही आप सभी सॉफ़्टवेयर को स्क्रैच से संकलित करें - इसे उठने और चलने में एक घंटे या उससे अधिक समय नहीं लगेगा।
या, आप मेरे द्वारा लिखी गई बातों को अनदेखा कर सकते हैं और Redis का उपयोग करके समाधान ढूंढ सकते हैं।