TypeScript में कैशिंग: Redis, Memcached और इन-बिल्ट समाधान - पूरी गाइड
\n\nकैशिंग वेब एप्लिकेशन और सर्विसेज की परफॉरमेंस बढ़ाने का एक सबसे कारगर तरीका है। TypeScript और Node.js इकोसिस्टम में डेवलपर्स के पास कई विकल्प हैं - पावरफुल एक्सटर्नल सिस्टम (Redis, Memcached) से लेकर हल्के इन-बिल्ट समाधान तक। इस आर्टिकल में हम तीनों तरीकों को विस्तार से समझेंगे, TypeScript में प्रैक्टिकल कोड उदाहरण देंगे, और आपके प्रोजेक्ट के लिए सबसे सही स्ट्रेटेजी चुनने में मदद करेंगे।
\n\nTypeScript में कैशिंग क्यों ज़रूरी है?
\nकैशिंग से सर्वर का रिस्पॉन्स टाइम कम होता है, डेटाबेस और एक्सटर्नल API पर लोड घटता है, और बार-बार आने वाले रिक्वेस्ट में देरी कम होती है। Node.js पर चलने वाले TypeScript में कैशिंग खासतौर पर इनके लिए फायदेमंद है:
\n- \n
- महंगे कैलकुलेशन के रिजल्ट स्टोर करना; \n
- एक्सटर्नल API के रिस्पॉन्स को कैश करना; \n
- यूज़र सेशन को सेव करना; \n
- डेटाबेस पर क्वेरी की संख्या कम करना। \n
1. TypeScript में इन-बिल्ट कैशिंग समाधान
\nछोटे प्रोजेक्ट या प्रोटोटाइप के लिए बिना कोई एक्सट्रा पैकेज इंस्टॉल किए Node.js के बिल्ट-इन फीचर्स का उपयोग कर सकते हैं।
\n\n1.1. Map का उपयोग
\nसबसे आसान तरीका है Map ऑब्जेक्ट या सिंपल ऑब्जेक्ट का इस्तेमाल। लेकिन यह कैश सिर्फ एक प्रोसेस की मेमोरी में रहता है और रीस्टार्ट होने पर खत्म हो जाता है।
// Map पर आधारित सिंपल कैश\nclass SimpleCache<T> {\n private cache = new Map<string, T>();\n\n get(key: string): T | undefined {\n return this.cache.get(key);\n }\n\n set(key: string, value: T): void {\n this.cache.set(key, value);\n }\n\n clear(): void {\n this.cache.clear();\n }\n}\n\n// उपयोग का उदाहरण\nconst cache = new SimpleCache<string>();\ncache.set('user:1', 'Alice');\nconsole.log(cache.get('user:1')); // Alice\n\n1.2. TTL (Time-To-Live) के साथ कैश
\nएक और एडवांस्ड वर्शन - जिसमें तय समय के बाद एंट्री अपने आप डिलीट हो जाती है।
\n// TTL के साथ कैश\nclass TtlCache<T> {\n private cache = new Map<string, { value: T; expiry: number }>();\n\n get(key: string): T | undefined {\n const item = this.cache.get(key);\n if (!item) return undefined;\n if (Date.now() > item.expiry) {\n this.cache.delete(key);\n return undefined;\n }\n return item.value;\n }\n\n set(key: string, value: T, ttlMs: number): void {\n this.cache.set(key, {\n value,\n expiry: Date.now() + ttlMs,\n });\n }\n}\n\n// उदाहरण\nconst ttlCache = new TtlCache<number>();\nttlCache.set('price', 100, 5000); // 5 सेकंड तक जीवित\nsetTimeout(() => console.log(ttlCache.get('price')), 6000); // undefined\n\n2. TypeScript में Redis के साथ कैशिंग
\nRedis एक लोकप्रिय in-memory डेटा स्टोर है जो एडवांस्ड डेटा स्ट्रक्चर, pub/sub और पर्सिस्टेंसी को सपोर्ट करता है। TypeScript के लिए ioredis पैकेज का उपयोग किया जाता है।
2.1. इंस्टॉलेशन और कनेक्शन
\nnpm install ioredis\nnpm install @types/ioredis --save-dev\nimport Redis from 'ioredis';\n\nconst redis = new Redis({\n host: 'localhost',\n port: 6379,\n});\n\nredis.on('connect', () => console.log('Redis से कनेक्ट हुआ'));\nredis.on('error', (err) => console.error('Redis एरर', err));\n\n2.2. बेसिक set/get ऑपरेशन
\n// वैल्यू सेव करें\nawait redis.set('user:1:name', 'Alice');\n\n// वैल्यू प्राप्त करें\nconst name = await redis.get('user:1:name');\nconsole.log(name); // Alice\n\n// TTL सेट करें (सेकंड में)\nawait redis.setex('session:123', 3600, 'active');\n\n2.3. ऑब्जेक्ट (JSON) के साथ काम करना
\n// ऑब्जेक्ट सेव करें\nconst user = { id: 1, name: 'Alice', email: 'alice@example.com' };\nawait redis.set('user:1', JSON.stringify(user));\n\n// पढ़ें और पार्स करें\nconst r