जावास्क्रिप्ट में कैशिंग: Redis, Memcached और अंतर्निहित समाधान
कैशिंग वेब अनुप्रयोगों के प्रदर्शन को अनुकूलित करने की प्रमुख रणनीतियों में से एक है। जावास्क्रिप्ट (विशेषकर Node.js) पारिस्थितिकी तंत्र में, डेवलपर्स के पास शक्तिशाली उपकरणों तक पहुंच है: अंतर्निहित तंत्र से लेकर Redis और Memcached जैसी वितरित प्रणालियाँ तक। इस लेख में, हम वास्तविक कोड उदाहरणों के साथ, प्रत्येक दृष्टिकोण का उपयोग कब और कैसे करना है, इस पर चर्चा करेंगे।
Node.js में कैशिंग की आवश्यकता क्यों है?
कैशिंग के बिना, सर्वर पर प्रत्येक अनुरोध महंगे संचालन का कारण बन सकता है: डेटाबेस से पढ़ना, जटिल गणना या बाहरी API कॉल। कैश पहले अनुरोध के परिणाम को सहेजता है और बार-बार अनुरोध करने पर उसे वापस करता है। इससे सर्वर पर लोड कम होता है, प्रतिक्रिया समय घटता है और उपयोगकर्ता अनुभव बेहतर होता है।
Node.js में कैश के उपयोग के मुख्य परिदृश्य:
- डेटाबेस क्वेरी के परिणाम (विशेषकर एग्रीगेशन)
- बाहरी API के उत्तर (मौसम, मुद्रा दरें)
- भारी गणनाएँ (रिपोर्ट जनरेशन, इमेज प्रोसेसिंग)
- उपयोगकर्ता सत्र और प्रमाणीकरण टोकन
जावास्क्रिप्ट (Node.js) में अंतर्निहित कैशिंग
सबसे सरल तरीका प्रक्रिया की मेमोरी में डेटा संग्रहीत करने के लिए Map या Object ऑब्जेक्ट का उपयोग करना है। यह तेज़ है, लेकिन इसकी सीमाएँ हैं: डेटा तब तक जीवित रहता है जब तक सर्वर चल रहा है, और मेमोरी असीमित नहीं है।
उदाहरण: TTL (Time To Live) के साथ Map पर कैश
class SimpleCache { constructor(ttl = 60000) { this.cache = new Map(); this.ttl = ttl; // मिलीसेकंड में जीवनकाल (डिफ़ॉल्ट 1 मिनट) }
set(key, value) { this.cache.set(key, { value, timestamp: Date.now() }); }
get(key) { const item = this.cache.get(key); if (!item) return null; if (Date.now() - item.timestamp > this.ttl) { this.cache.delete(key); return null; } return item.value; }
delete(key) { this.cache.delete(key); }
clear() { this.cache.clear(); }}
// उपयोगconst cache = new SimpleCache(30000); // 30 सेकंडcache.set('user_123', { name: 'इवान', role: 'admin' });const user = cache.get('user_123');console.log(user); // { name: 'इवान', role: 'admin' }लाभ: शून्य विलंबता, सरलता, बाहरी निर्भरता की आवश्यकता नहीं।
नुकसान: पुनरारंभ करने पर डेटा खो जाता है, एक प्रक्रिया की मेमोरी तक सीमित, वितरित प्रणालियों के लिए उपयुक्त नहीं।
अधिक उन्नत अंतर्निहित कैश के लिए, आप node-cache पैकेज का उपयोग कर सकते हैं, जो स्वचालित सफाई, सांख्यिकी और स्ट्रिंग कुंजियों के लिए समर्थन जोड़ता है।
Redis: Node.js के लिए वितरित कैश
Redis एक in-memory डेटा स्टोर है जिसे अक्सर कैश के रूप में उपयोग किया जाता है। Node.js में Redis के साथ काम करने के लिए ioredis पैकेज का उपयोग किया जाता है (redis से अधिक आधुनिक)।
स्थापना और बुनियादी कनेक्शन
npm install ioredisconst Redis = require('ioredis');const redis = new Redis({ host: 'localhost', port: 6379, // password: 'your-password' // यदि आवश्यक हो});
redis.on('connect', () => console.log('Redis से कनेक्ट हुआ'));redis.on('error', (err) => console.error('Redis त्रुटि:', err));उदाहरण: TTL के साथ डेटा कैशिंग
const Redis = require('ioredis');const redis = new Redis();
async function getCachedData(key, fetchFunction, ttl = 3600) { // कैश से प्राप्त करने का प्रयास const cached = await redis.get(key); if (cached) { return JSON.parse(cached); }
// यदि नहीं है - डेटा प्राप्त करें और सहेजें const data = await fetchFunction(); await redis.setex(key, ttl, JSON.stringify(data)); return data;}
// उपयोग का उदाहरण: कैशिंग