PHP में कैशिंग: Redis, Memcached और अंतर्निहित समाधान
कैशिंग वेब एप्लिकेशन के प्रदर्शन को बढ़ाने के लिए प्रमुख उपकरणों में से एक है। PHP में डेवलपर के पास कई दृष्टिकोण उपलब्ध हैं: सरल फ़ाइल कैश से लेकर Redis और Memcached जैसी शक्तिशाली in-memory प्रणालियाँ तक। इस लेख में हम प्रत्येक विकल्प पर विस्तार से चर्चा करेंगे, कोड उदाहरण देंगे और आपके प्रोजेक्ट के लिए सर्वोत्तम समाधान चुनने में मदद करेंगे।
कैशिंग की आवश्यकता क्यों है?
कैशिंग के बिना, साइट पर प्रत्येक अनुरोध बार-बार गणना, डेटाबेस क्वेरी या बाहरी API कॉल का कारण बन सकता है। कैश महंगे ऑपरेशन के परिणाम को सहेजने और तेज़ स्टोरेज से प्रदान करने की अनुमति देता है। मुख्य उपयोग के मामले:
- SQL क्वेरी के परिणामों को सहेजना (विशेषकर एग्रीगेशन और JOIN)।
- HTML टुकड़ों को कैश करना (जैसे, मेनू, साइडबार)।
- उपयोगकर्ता सत्रों को संग्रहीत करना।
- बाहरी API के उत्तरों को कैश करना।
1. Redis — in-memory कैशिंग का राजा
Redis एक उच्च-प्रदर्शन वाला इन-मेमोरी डेटा स्टोर है जो डेटा संरचनाओं का समर्थन करता है: स्ट्रिंग्स, लिस्ट्स, हैशेज़, सेट्स। PHP के लिए कई क्लाइंट मौजूद हैं, सबसे लोकप्रिय predis/predis (शुद्ध PHP) और phpredis (C पर एक्सटेंशन) हैं।
स्थापना
composer require predis/predisउदाहरण: डेटाबेस क्वेरी परिणाम को कैश करना
<?phprequire 'vendor/autoload.php';
use Predis\\Client;
$redis = new Client([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379,]);
function getUsersFromDb() { // लंबी क्वेरी का अनुकरण sleep(2); return ['user1', 'user2', 'user3'];}
$cacheKey = 'users:all';$cached = $redis->get($cacheKey);
if ($cached) { $users = json_decode($cached, true); echo "कैश से: ";} else { $users = getUsersFromDb(); $redis->setex($cacheKey, 3600, json_encode($users)); // TTL 1 घंटा echo "डेटाबेस से: ";}
print_r($users);Redis की प्रमुख क्षमताएँ:
setex()— समय-सीमा (TTL) के साथ कुंजी सेट करना।expire()— मौजूदा कुंजी के लिए TTL सेट करना।del()— कुंजी हटाना।incr()— परमाणु वृद्धि (काउंटर)।
2. Memcached — सरलता और गति
Memcached एक और लोकप्रिय in-memory प्रणाली है, लेकिन Redis के विपरीत, यह केवल स्ट्रिंग मानों का समर्थन करती है और इसमें अंतर्निहित डेटा संरचनाएँ नहीं हैं। हालाँकि, सरल कैशिंग के लिए यह न्यूनतमता के कारण तेज़ काम करती है।
एक्सटेंशन की स्थापना
sudo apt install php-memcached# या pecl के माध्यम से:pecl install memcachedउदाहरण: HTML टुकड़े को कैश करना
<?php$memcached = new Memcached();$memcached->addServer('127.0.0.1', 11211);
function renderMenu() { // महँगा मेनू जनरेशन return '<nav><ul><li>होम</li></ul></nav>';}
$menuHtml = $memcached->get('menu:main');if ($menuHtml === false) { $menuHtml = renderMenu(); $memcached->set('menu:main', $menuHtml, 600); // TTL 10 मिनट}
echo $menuHtml;महत्वपूर्ण: Memcached डिफ़ॉल्ट रूप से सेकंड में TTL का समर्थन नहीं करता है — समय सेकंड (पूर्णांक) में निर्धारित किया जाता है। यदि 0 पास किया जाता है, तो कैश हमेशा के लिए संग्रहीत रहेगा।
3. APCu — PHP में अंतर्निहित कैशिंग
APCu (Alternative PHP Cache) एक सर्वर की साझा मेमोरी में डेटा कैश करने के लिए एक एक्सटेंशन है। यह एकल-पृष्ठ एप्लिकेशन और छोटे प्रोजेक्ट के लिए आदर्श है।
स्थापना
sudo apt install php-apcuउदाहरण: कॉन्फ़िगरेशन को कैश करना
<?php$configKey = 'app:config';
if