TypeScript में कैशिंग: Redis, node-cache और अन्य उपकरण

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

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

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

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



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



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

कैशिंग बार-बार अनुरोधित डेटा को तेज़ स्टोरेज में अस्थायी रूप से संग्रहीत करने की अनुमति देता है, ताकि हर बार महंगे ऑपरेशन (डेटाबेस क्वेरी, गणना, बाहरी API) न करने पड़ें। इससे सर्वर पर लोड कम होता है और प्रतिक्रिया समय घटता है।



TypeScript में कैशिंग के लिए मुख्य उपकरण



1. ioredis लाइब्रेरी के माध्यम से Redis

Redis एक उच्च-प्रदर्शन वाला in-memory डेटा स्टोर है जो विभिन्न डेटा संरचनाओं का समर्थन करता है। TypeScript के लिए, ioredis सबसे अच्छा विकल्प है - यह प्रकार और प्रॉमिस के पूर्ण समर्थन वाला क्लाइंट है।



import Redis from 'ioredis';

// क्लाइंट बनाएँconst redis = new Redis({ host: 'localhost', port: 6379,});

// TTL के साथ कैशिंग के लिए फ़ंक्शनasync function cacheGet(key: string): Promise<string | null> { const data = await redis.get(key); return data;}

async function cacheSet(key: string, value: string, ttl: number = 3600): Promise<void> { await redis.setex(key, ttl, value);}

// उपयोग का उदाहरणasync function getUserData(userId: string) { const cacheKey = `user:${userId}`; const cached = await cacheGet(cacheKey); if (cached) { return JSON.parse(cached); } // महँगे अनुरोध का अनुकरण const userData = { id: userId, name: 'John Doe' }; await cacheSet(cacheKey, JSON.stringify(userData), 3600); return userData;}


2. node-cache — छोटे प्रोजेक्ट्स के लिए in-memory कैश

node-cache एक सरल in-memory लाइब्रेरी है जिसे बाहरी निर्भरता की आवश्यकता नहीं है। यह प्रोटोटाइप और कम डेटा वाले माइक्रोसर्विसेज के लिए आदर्श है।



import NodeCache from 'node-cache';

const myCache = new NodeCache({ stdTTL: 600, checkperiod: 120 });

// डेटा सहेजेंmyCache.set('key', { data: 'value' });

// डेटा प्राप्त करेंconst value = myCache.get('key');if (value) { console.log('कैश से:', value);} else { console.log('कैश खाली है, डेटा का अनुरोध कर रहे हैं...');}

// कुंजी द्वारा हटानाmyCache.del('key');

// पूरे कैश को साफ़ करनाmyCache.flushAll();


3. async-cache-dedupe — डुप्लिकेट अनुरोधों को रोकने के लिए

यह लाइब्रेरी "cache stampede" समस्या को हल करती है (जब कई अनुरोध एक साथ कैश भरने का प्रयास करते हैं)। यह एक ही कुंजी के समानांतर अनुरोधों को स्वचालित रूप से डीडुप्लिकेट करता है।



import { createCache } from 'async-cache-dedupe';

const cache = createCache({ ttl: 60, // सेकंड में जीवनकाल stale: 10, // वह समय जब डेटा पुराना माना जाता है लेकिन फिर भी दिया जा सकता है});

// एसिंक्रोनस फ़ंक्शन को लपेटेंconst getData = cache.define('getData', async (id: number) => { // महँगा अनुरोध const result = await fetch(`https://api.example.com/data/${id}`); return result.json();});

// उपयोग करेंconst result = await getData(42);


कैश अमान्यकरण रणनीतियाँ

कैशिंग में सबसे कठिन कार्यों में से एक अमान्यकरण है - पुराने डेटा को अपडेट करना। आइए मुख्य दृष्टिकोणों पर विचार करें:



  • TTL (Time-To-Live) — डेटा निर्धारित समय के बाद स्वचालित रूप से हटा दिया जाता है। सरल और विश्वसनीय तरीका।
  • आलसी अमान्यकरण — प्रत्येक अनुरोध पर डेटा की वैधता की जाँच करें (उदाहरण के लिए, संस्करण द्वारा)।
  • Event-driven अमान्यकरण — जब डेटाबेस में डेटा बदलता है, तो संबंधित कैश को साफ़ करने के लिए एक ईवेंट भेजें।
  • Write-through — मुख्य डेटा में लिखने के साथ-साथ कैश को भी अपडेट करें।

अनुशंसाएँ