TypeScript में कैशिंग: Redis और Node.js के लिए अन्य समाधान

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript में कैशिंग: Redis और Node.js के लिए अन्य उपकरण

\n\n

कैशिंग वेब अनुप्रयोगों के प्रदर्शन को अनुकूलित करने के प्रमुख तंत्रों में से एक है। Node.js पर TypeScript प्रोजेक्ट्स में, कैश API प्रतिक्रिया समय को कम करने, डेटाबेस पर लोड कम करने और बाहरी कॉल पर खर्च कम करने की अनुमति देता है। इस लेख में हम कैशिंग के लिए लोकप्रिय लाइब्रेरीज़, उनके कॉन्फ़िगरेशन और व्यावहारिक उदाहरणों पर चर्चा करेंगे।

\n\n

कैशिंग की आवश्यकता क्यों है?

\n

कैश के बिना, सर्वर पर प्रत्येक अनुरोध डेटा के पुन: प्रसंस्करण का कारण बन सकता है: DB से पढ़ना, जटिल गणना या बाहरी API तक पहुँचना। कैश पहली कॉल के परिणाम को सहेजता है और बार-बार अनुरोधों पर इसे मिलीसेकंड में प्रदान करता है। मुख्य परिदृश्य:

\n
    \n
  • बाहरी सेवाओं (मौसम, मुद्रा दरें) से प्रतिक्रियाओं को कैश करना;
  • \n
  • अक्सर अनुरोधित डेटा (निर्देशिकाएँ, कॉन्फ़िगरेशन) संग्रहीत करना;
  • \n
  • पेज रेंडरिंग समय कम करना;
  • \n
  • DB अनुरोधों की संख्या सीमित करना।
  • \n
\n\n

TypeScript में कैशिंग के लिए लोकप्रिय लाइब्रेरीज़

\n\n

1. Redis (ioredis के माध्यम से)

\n

Redis एक in-memory डेटा स्टोर है जो सर्वर के रूप में काम करता है। TypeScript के लिए सबसे अच्छा क्लाइंट ioredis है जिसमें पूर्ण प्रकार समर्थन है। स्थापना:

\n
npm install ioredis\nnpm install -D @types/ioredis
\n\n

TTL (जीवनकाल) के साथ बुनियादी कैश का उदाहरण:

\n
import Redis from 'ioredis';\n\nconst redis = new Redis({\n    host: 'localhost',\n    port: 6379,\n});\n\n// डेटा को 60 सेकंड के लिए सहेजें\nawait redis.set('user:123', JSON.stringify({ name: 'अन्ना' }), 'EX', 60);\n\n// डेटा प्राप्त करें\nconst cached = await redis.get('user:123');\nif (cached) {\n    const user = JSON.parse(cached);\n    console.log(user.name); // अन्ना\n}
\n\n

लाभ: वितरित भंडारण, कुंजियों का स्वचालित निष्कासन, जटिल संरचनाओं (सूचियाँ, हैश) का समर्थन। नुकसान: चालू Redis सर्वर की आवश्यकता, नेटवर्क कॉल पर विलंब।

\n\n

2. node-cache (in-memory)

\n

node-cache प्रक्रिया मेमोरी में कैशिंग के लिए एक सरल लाइब्रेरी है। इसे बाहरी निर्भरता की आवश्यकता नहीं है। स्थापना:

\n
npm install node-cache\nnpm install -D @types/node-cache
\n\n

उदाहरण:

\n
import NodeCache from 'node-cache';\n\nconst myCache = new NodeCache({ stdTTL: 120 }); // डिफ़ॉल्ट TTL 120 सेकंड\n\n// सहेजें\nmyCache.set('config', { theme: 'dark', lang: 'ru' });\n\n// प्राप्त करें\nconst config = myCache.get('config');\nif (config) {\n    console.log(config.theme); // dark\n}\n\n// हटाएँ\nmyCache.del('config');
\n\n

यह छोटे अनुप्रयोगों के लिए उपयुक्त है जहाँ सर्वरों के बीच सिंक्रनाइज़ेशन की आवश्यकता नहीं है।

\n\n

3. memory-cache

\n

एक और in-memory लाइब्रेरी जिसमें न्यूनतम API है। यह सादगी और निर्भरता की कमी से अलग है:

\n
npm install memory-cache
\n\n

उदाहरण:

\n
import cache from 'memory-cache';\n\ncache.put('weather', { temp: 22, condition: 'sunny' }, 300_000); // 5 मिनट\n\nconst weather = cache.get('weather');\nif (weather) {\n    console.log(`तापमान: ${weather.temp}°C`);\n}\n\n// कुंजी की उपस्थिति की जाँच\nif (cache.keys().includes('weather')) {\n    // ...\n}
\n\n

TypeScript के लिए कैशिंग रणनीतियाँ

\n

रणनीति का चुनाव डेटा की प्रकृति पर निर्भर करता है:

\n
    \n
  • Write-through — डेटा एक साथ कैश और DB में लिखा जाता है। संगति सुनिश्चित करता है, लेकिन लेखन समय बढ़ाता है।
  • \n
  • Write-behind — कैश में तत्काल लेखन, DB में अतुल्यकालिक रूप से। तेज़, लेकिन विफलता पर डेटा हानि संभव है।
  • \n
  • Cache-aside — एप्लिकेशन स्वयं कैश की जाँच करता है, मिस होने पर DB से पढ़ता है और कैश भरता है। सबसे लोकप्रिय पैटर्न।
  • \n
\n\n

ioredis के साथ TypeScript में Cache-aside का कार्यान्वयन:

\n
async function getUserById(id: number) {\n    const cacheKey = `user:${id}`;\n    const cached = await redis.get(cacheKey);\n\n    if                    

अनुशंसाएँ