JavaScript (Node.js) में कैशिंग: Redis और अन्य उपकरण
कैशिंग Node.js पर वेब एप्लिकेशन के प्रदर्शन को बढ़ाने के सबसे प्रभावी तरीकों में से एक है। यह प्रतिक्रिया समय को कम करता है, डेटाबेस पर लोड कम करता है और बुनियादी ढांचे की लागत को कम करता है। इस लेख में, हम Node.js वातावरण में कैशिंग के मुख्य उपकरणों: Redis, Memcached और इन-बिल्ट मेमोरी कैशिंग (in-memory cache) पर चर्चा करेंगे। आप जानेंगे कि कब कौन सा उपकरण चुनना है, और काम करने वाले कोड उदाहरण देखेंगे।
Node.js में कैशिंग की आवश्यकता क्यों है?
Node.js सिंगल-थ्रेडेड लेकिन एसिंक्रोनस है। डेटाबेस या बाहरी API से प्रत्येक अनुरोध एक प्रतीक्षा (I/O) है। कैश एक महंगे ऑपरेशन (जैसे जटिल SQL क्वेरी या HTML पार्सिंग) के परिणाम को सहेजने और तुरंत प्रदान करने की अनुमति देता है। मुख्य उपयोग के परिदृश्य:
- डेटाबेस क्वेरी के परिणामों को सहेजना (विशेष रूप से एग्रीगेटिंग)
- बाहरी API प्रतिक्रियाओं को कैश करना (मौसम, मुद्रा दरें)
- उपयोगकर्ता सत्रों को संग्रहीत करना
- गणना किए गए डेटा का अस्थायी भंडारण (जैसे टेम्पलेट रेंडरिंग)
1. Redis — कैशिंग का राजा
Redis एक in-memory डेटा स्टोर है जिसे अक्सर कैश के रूप में उपयोग किया जाता है। यह एक अलग प्रक्रिया में काम करता है, जटिल डेटा संरचनाओं (स्ट्रिंग्स, हैश, लिस्ट्स, सेट्स) का समर्थन करता है और इसमें बिल्ट-इन TTL (कुंजी का जीवनकाल) तंत्र है।
स्थापना और कनेक्शन
काम करने के लिए एक स्थापित Redis सर्वर (स्थानीय रूप से या Docker में) की आवश्यकता होती है। Node.js में हम redis पैकेज का उपयोग करते हैं:
npm install redisउदाहरण: TTL के साथ डेटा कैशिंग
const redis = require('redis');const client = redis.createClient();
client.on('error', (err) => console.error('Redis error:', err));
// कैश के साथ डेटा प्राप्त करने का एसिंक्रोनस फंक्शनasync function getCachedData(key, fetchFunction, ttlSeconds = 60) { // कैश से प्राप्त करने का प्रयास const cached = await client.get(key); if (cached) { return JSON.parse(cached); }
// यदि नहीं है — महंगा फंक्शन कॉल करें const freshData = await fetchFunction();
// TTL के साथ कैश में सहेजें await client.setEx(key, ttlSeconds, JSON.stringify(freshData)); return freshData;}
// उपयोग: डेटाबेस क्वेरी के परिणाम को कैश करेंconst users = await getCachedData('users:list', () => db.query('SELECT * FROM users'), 120);Redis के लाभ
- उच्च प्रदर्शन (प्रति सेकंड लाखों ऑपरेशन)
- TTL, pub/sub, ट्रांजेक्शन का समर्थन
- परसिस्टेंसी (डिस्क पर सहेजा जा सकता है)
- वितरित सिस्टम (एकाधिक Node.js सर्वर) के लिए उपयुक्त
नुकसान
- एक अलग सर्वर/कंटेनर की आवश्यकता
- रैम की खपत करता है
- सरल सिंगल-थ्रेडेड एप्लिकेशन के लिए अत्यधिक
2. Memcached — हल्का और तेज़
Memcached एक और लोकप्रिय in-memory कैश है, लेकिन Redis से सरल: केवल स्ट्रिंग्स, कोई परसिस्टेंसी नहीं, कोई जटिल संरचना नहीं। सरल डेटा कैशिंग के लिए आदर्श।
स्थापना और उदाहरण
npm install memcachedconst Memcached = require('memcached');const memcached = new Memcached('localhost:11211');
async function getCachedData(key, fetchFunction, ttlSeconds = 60) { return new Promise((resolve, reject) => { memcached.get(key, async (err, data) => { if (data) return resolve(JSON.parse(data));
const freshData = await fetchFunction(); memcached.set(key, JSON.stringify(freshData), ttlSeconds, (err) => { if (err) reject(err); resolve(freshData); }); }); });}Memcached का उपयोग कब करें?
- केवल सरल की-वैल्यू कैश की आवश्यकता है
- रीस्टार्ट के बाद डेटा सहेजने की आवश्यकता नहीं है
- संसाधन सीमित हैं (Memcached Redis से हल्का है)