PHP में कैशिंग: Redis और अन्य उपकरण
\n\nकैशिंग PHP पर वेब एप्लिकेशन के प्रदर्शन को अनुकूलित करने के प्रमुख तंत्रों में से एक है। सही ढंग से कॉन्फ़िगर की गई कैशिंग सर्वर प्रतिक्रिया समय को 10-50 गुना तक कम कर सकती है, डेटाबेस पर लोड कम कर सकती है और संसाधन खपत को घटा सकती है। इस लेख में, हम PHP में कैशिंग के चार मुख्य दृष्टिकोणों पर चर्चा करेंगे: Redis, Memcached, APCu और क्लासिक फ़ाइल कैशिंग।
\n\nPHP में कैशिंग की आवश्यकता क्यों है?
\n\nकैशिंग के बिना, प्रत्येक PHP अनुरोध दर्जनों SQL क्वेरी निष्पादित कर सकता है, टेम्पलेट प्रोसेस कर सकता है और बाहरी डेटा लोड कर सकता है। कैशिंग एक महंगे ऑपरेशन (जैसे, DB से डेटा लाना या XML पार्सिंग) के परिणाम को सहेजता है और बार-बार गणना को छोड़कर सीधे प्रदान करता है। मुख्य उपयोग परिदृश्य:
\n\n- \n
- SQL क्वेरी परिणामों का कैशिंग — SELECT क्वेरी के परिणाम को 5-60 सेकंड के लिए सहेजें। \n
- HTML टुकड़ों का कैशिंग — तैयार मेनू ब्लॉक, विजेट, ब्रेडक्रंब। \n
- सत्रों का कैशिंग — फ़ाइलों के बजाय Redis में सत्र डेटा संग्रहीत करना। \n
- API डेटा का कैशिंग — बाहरी सेवाओं के उत्तर (मौसम, मुद्रा दरें)। \n
- Opcode कैशिंग — PHP कोड के निष्पादन को गति देना (OPcache)। \n
1. Redis — इन-मेमोरी कैशिंग का राजा
\n\nRedis एक उच्च-प्रदर्शन इन-मेमोरी की-वैल्यू डेटा स्टोर है जो जटिल संरचनाओं (सूचियाँ, हैश, सेट) का समर्थन करता है। PHP के लिए कई क्लाइंट उपलब्ध हैं: predis/predis (शुद्ध PHP) और ext-redis (C-एक्सटेंशन)।
Composer के माध्यम से स्थापना का उदाहरण:
\ncomposer require predis/predis\n\nRedis के साथ बुनियादी कैशिंग उदाहरण:
\n<?php\nrequire 'vendor/autoload.php';\n\nuse Predis\\Client;\n\n$redis = new Client([\n 'scheme' => 'tcp',\n 'host' => '127.0.0.1',\n 'port' => 6379,\n]);\n\n$cacheKey = 'user_list_page_1';\n$ttl = 300; // 5 मिनट\n\n// कैश से डेटा प्राप्त करने का प्रयास\nif ($redis->exists($cacheKey)) {\n $data = unserialize($redis->get($cacheKey));\n echo "कैश से डेटा";\n} else {\n // महंगा ऑपरेशन (जैसे, SQL क्वेरी)\n $data = getUsersFromDatabase(1, 20);\n $redis->setex($cacheKey, $ttl, serialize($data));\n echo "DB से डेटा";\n}\n\nprint_r($data);\n\nRedis के लाभ: गति (मिलीसेकंड), TTL समर्थन, परमाणु संचालन, Pub/Sub, डिस्क पर स्थायित्व। नुकसान: एक अलग सर्वर की आवश्यकता, RAM की खपत।
\n\n2. Memcached — सरलता और गति
\n\nMemcached एक और लोकप्रिय इन-मेमोरी स्टोर है, लेकिन जटिल डेटा संरचनाओं के बिना। PHP में, memcached एक्सटेंशन का उपयोग किया जाता है (अक्षर d पर ध्यान दें — यह एक नया संस्करण है)।
एक्सटेंशन स्थापित करना:
\nsudo apt install php-memcached\n\nMemcached के साथ काम करने का उदाहरण:
\n<?php\n$memcached = new Memcached();\n$memcached->addServer('127.0.0.1', 11211);\n\n$key = 'article_42';\n$data = $memcached->get($key);\n\nif ($memcached->getResultCode() === Memcached::RES_NOTFOUND) {\n $data = fetchArticleFromDB(42);\n $memcached->set($key, $data, 3600); // 1 घंटा\n echo "DB से अनुरोध";\n} else {\n echo "Memcached कैश से";\n}\n\nMemcached कब चुनें: जब आपको जटिल संरचनाओं के बिना स्ट्रिंग्स का सरल कैशिंग चाहिए, और आप स्थायित्व सेट करना नहीं चाहते। Memcached सरल get/set संचालन में Redis से तेज़ है, लेकिन कार्यक्षमता में कमतर है।
\n\n3. APCu — सीधे PHP में कैशिंग
\n\nAPCu (Alternative PHP Cache) वर्तमान PHP प्रक्रिया की साझा मेमोरी में डेटा कैश करने के लिए एक एक्सटेंशन है। इसे अलग