परिचय: जावास्क्रिप्ट में कैशिंग की आवश्यकता क्यों है
Node.js पर आधुनिक वेब एप्लिकेशन प्रतिदिन लाखों अनुरोधों को प्रोसेस करते हैं। उचित कैशिंग के बिना, डेटाबेस या बाहरी API की हर कॉल देरी उत्पन्न करती है, सर्वर लोड बढ़ाती है, और उपयोगकर्ता अनुभव को खराब करती है। कैशिंग बार-बार अनुरोधित डेटा को तेज़ स्टोरेज में अस्थायी रूप से संग्रहीत करने की एक तकनीक है, ताकि बाद के अनुरोधों पर भारी संचालन दोबारा न किए जाएं।
जावास्क्रिप्ट (Node.js) इकोसिस्टम में, कैशिंग के तीन मुख्य दृष्टिकोण हैं:
- अंतर्निहित समाधान (इन-मेमोरी कैश) — सरल लाइब्रेरीज़ जो Node.js प्रक्रिया की मेमोरी में डेटा संग्रहीत करती हैं।
- मेमकैश्ड (Memcached) — एक वितरित कैशिंग सिस्टम जो RAM में काम करता है।
- रेडिस (Redis) — जटिल डेटा संरचनाओं के समर्थन के साथ एक उन्नत इन-मेमोरी डेटा स्टोर।
इस लेख में, हम प्रत्येक दृष्टिकोण का विस्तार से विश्लेषण करेंगे, जावास्क्रिप्ट में कोड उदाहरण प्रदान करेंगे, और आपके प्रोजेक्ट के लिए इष्टतम समाधान चुनने में आपकी सहायता करेंगे।
Node.js में कैशिंग के लिए अंतर्निहित समाधान
कैशिंग व्यवस्थित करने का सबसे सरल तरीका अंतर्निहित जावास्क्रिप्ट क्षमताओं या हल्की लाइब्रेरीज़ का उपयोग करना है। ऐसे समाधानों के लिए बाहरी सेवाओं को स्थापित करने की आवश्यकता नहीं होती है और ये छोटे प्रोजेक्ट्स या प्रोटोटाइप के लिए आदर्श हैं।
सरल ऑब्जेक्ट कैश
एक सामान्य जावास्क्रिप्ट ऑब्जेक्ट का उपयोग करके कैशिंग का एक बुनियादी उदाहरण:
class SimpleCache { constructor() { this.cache = {}; }
get(key) { return this.cache[key]; }
set(key, value, ttl = 60000) { this.cache[key] = value; setTimeout(() => { delete this.cache[key]; }, ttl); }
delete(key) { delete this.cache[key]; }
clear() { this.cache = {}; }}
// Usageconst cache = new SimpleCache();cache.set('user:123', { name: 'Anna', role: 'admin' }, 30000);console.log(cache.get('user:123')); // { name: 'Anna', role: 'admin' }इस दृष्टिकोण के नुकसान: कोई स्वचालित मेमोरी सफाई नहीं, बड़ी संख्या में कुंजियों के साथ मेमोरी लीक, वितरित कैशिंग का कोई समर्थन नहीं।
node-cache लाइब्रेरी
एक अधिक उन्नत विकल्प node-cache पैकेज का उपयोग करना है:
const NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });
// Save datamyCache.set('key', { data: 'value' });
// Get dataconst value = myCache.get('key');if (value === undefined) { // Data not found — need to fetch from DB console.log('Cache miss');} else { console.log('Cache hit:', value);}
// Delete by keymyCache.del('key');
// Statisticsconsole.log(myCache.getStats());node-cache TTL (जीवनकाल), समाप्त कुंजियों की स्वचालित सफाई, और बुनियादी आंकड़ों का समर्थन करता है। हालाँकि, यह मल्टी-प्रोसेस एप्लिकेशन के लिए उपयुक्त नहीं है — प्रत्येक Node.js प्रक्रिया डेटा की अपनी प्रति संग्रहीत करती है।
मेमकैश्ड: हल्का वितरित कैशिंग
मेमकैश्ड RAM में एक उच्च-प्रदर्शन वितरित ऑब्जेक्ट कैशिंग सिस्टम है। यह डेटाबेस क्वेरी परिणामों, उपयोगकर्ता सत्रों और HTML टुकड़ों को कैश करने के लिए आदर्श है।
मेमकैश्ड स्थापित करना और कनेक्ट करना
पहले, मेमकैश्ड सर्वर और Node.js के लिए क्लाइंट स्थापित करें:
# Install server (Ubuntu/Debian)sudo apt-get install memcached
# Install client for Node.jsnpm install memcachedNode.js में मेमकैश्ड के साथ काम करने का उदाहरण
const Memcached = require('memcached');const memcached = new Memcached('localhost:11211');
// Save data with TTL (in seconds)memcached.set('user:456', { name: 'Ivan', email: 'ivan@example.com' }, 3600, (err) => { if (err) console.error('Error saving:', err);});
// Get datamemcached.get('user:456', (err, data) => { if