कैशिंग रणनीतियाँ (Redis)
डेटाबेस का भार कम करने और API प्रतिक्रिया समय बेहतर बनाने के लिए Redis का उपयोग करके विभिन्न कैशिंग रणनीतियाँ लागू करें।
कैशिंग रणनीतियाँ (Redis), CoddyKit पर NestJS एंटरप्राइज़ बैकएंड API का एक निःशुल्क पाठ है। यह 6 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह NestJS एंटरप्राइज़ बैकएंड API सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। NestJS एंटरप्राइज़ बैकएंड API पाठ्यक्रम में कुल 6 पाठ शामिल हैं।
कैशिंग से एपीआई का प्रदर्शन बढ़ाना
Redis के साथ कैशिंग रणनीतियों में आपका स्वागत है! इस पाठ में हम जानेंगे कि अपने NestJS एपीआई के प्रदर्शन और प्रतिक्रिया-क्षमता को बहुत बेहतर कैसे बनाया जा सकता है।
कैशिंग एक ऐसी तकनीक है जिसमें बार-बार एक्सेस किए जाने वाले डेटा को तेज़ मेमोरी परत में अस्थायी रूप से संग्रहीत किया जाता है। इससे डेटाबेस क्वेरी या जटिल गणना जैसी बार-बार होने वाली महँगी कार्रवाइयों से बचने में मदद मिलती है।
कैशिंग क्यों महत्वपूर्ण है
एक ऐसे एपीआई एंडपॉइंट की कल्पना करें जो लोकप्रिय उत्पादों का डेटा प्राप्त करता है। हर बार उपयोगकर्ता के इस डेटा का अनुरोध करने पर आपका सर्वर डेटाबेस क्वेरी चला सकता है, जो धीमी और संसाधन-गहन हो सकती है।
- कम विलंबता: उपयोगकर्ताओं को डेटा तेज़ी से मिलता है।
- डेटाबेस पर कम भार: आपका डेटाबेस कम काम करता है और रुकावटों से बचता है।
- बेहतर विस्तार-क्षमता: आपका एप्लिकेशन धीमा हुए बिना अधिक उपयोगकर्ताओं को संभाल सकता है।
कैशिंग एक बफ़र की तरह काम करती है और हमेशा प्राथमिक डेटा स्रोत तक पहुँचने के बजाय मेमोरी से डेटा तेज़ी से उपलब्ध कराती है।
Redis से परिचय: आपकी इन-मेमोरी कैश
रेडिस (रिमोट डिक्शनरी सर्वर) एक लोकप्रिय ओपन-सोर्स, इन-मेमोरी डेटा संरचना स्टोर है। इसका उपयोग अक्सर डेटाबेस, कैश और संदेश ब्रोकर के रूप में किया जाता है।
- गति: Redis डेटा को RAM में संग्रहीत करता है, जिससे पढ़ने-लिखने की कार्रवाइयाँ बहुत तेज़ हो जाती हैं।
- बहुमुखी प्रतिभा: यह स्ट्रिंग, हैश, सूची, सेट और अन्य विभिन्न डेटा संरचनाओं का समर्थन करता है।
- स्थायित्व: मुख्य रूप से इन-मेमोरी होने के बावजूद Redis स्थायित्व के लिए डेटा को डिस्क पर सुरक्षित रख सकता है।
कैशिंग के लिए Redis की गति और सरल कुंजी-मान मॉडल इसे आदर्श विकल्प बनाते हैं।
Redis की बुनियादी बातें: कुंजी-मान कार्रवाइयाँ
Redis डेटा को सरल कुंजी-मान युग्मों के रूप में संग्रहीत करता है। आप डेटा के किसी भाग को एक विशिष्ट कुंजी देते हैं और बाद में उसे प्राप्त करने के लिए उसी कुंजी का उपयोग करते हैं। Redis CLI का उपयोग करके वैचारिक रूप से यह इस प्रकार दिखाई देता है:
# Connect to Redis CLI
redis-cli
# Store a value with a key
SET myapi:users:123 '{"name":"Alice"}'
# Retrieve the value using its key
GET myapi:users:123
# Set a value with an expiration time (10 seconds)
SETEX myapi:temp:data 10 'Expires Soon'NestJS CacheModule सेटअप
NestJS विभिन्न कैशिंग समाधानों को एकीकृत करने के लिए लचीला CacheModule प्रदान करता है। Redis का उपयोग करने के लिए हम @nestjs/cache-manager और cache-manager-redis-store इंस्टॉल करेंगे।
पहले पैकेज इंस्टॉल करें:
npm install @nestjs/cache-manager cache-manager-redis-store cache-managerफिर Redis का उपयोग करने के लिए अपना AppModule कॉन्फ़िगर करें:
import { Module, CacheModule } from '@nestjs/common';
import * as redisStore from 'cache-manager-redis-store';
@Module({
imports: [
CacheModule.register({
store: redisStore,
host: 'localhost',
port: 6379,
ttl: 300 // default time-to-live in seconds
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
CacheInterceptor से स्वचालित कैशिंग
सरल GET एंडपॉइंट के लिए NestJS CacheInterceptor प्रदान करता है। यह इंटरसेप्टर किसी मेथड की प्रतिक्रिया को स्वचालित रूप से कैश करता है और बाद के अनुरोधों पर उसे कैश से उपलब्ध कराता है।
आप डेकोरेटर का उपयोग करके इसे वैश्विक रूप से या विशिष्ट कंट्रोलर/मेथड पर लागू कर सकते हैं:
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { CacheInterceptor, CacheKey, CacheTTL } from '@nestjs/cache-manager';
@Controller('products')
@UseInterceptors(CacheInterceptor) // Apply to all methods in this controller
export class ProductsController {
@Get()
@CacheKey('all_products') // Unique key for this cache entry
@CacheTTL(60) // Cache for 60 seconds (overrides module default)
async findAll() {
// In a real app, this would fetch from a database
console.log('Fetching all products from DB...');
return [{ id: 1, name: 'Laptop' }, { id: 2, name: 'Mouse' }];
}
}CacheKey और CacheTTL को समझना
CacheInterceptor का उपयोग करते समय, दो मुख्य डेकोरेटर कैशिंग को नियंत्रित करने में आपकी सहायता करते हैं:
@CacheKey('your_key_name'): यह डेकोरेटर उस विशिष्ट कुंजी को निर्धारित करता है जिसके अंतर्गत प्रतिक्रिया डेटा Redis में संग्रहीत किया जाएगा। यदि इसे प्रदान नहीं किया जाता है, तो NestJS अनुरोध पथ के आधार पर एक कुंजी उत्पन्न करता है।@CacheTTL(seconds): यह कैश की गई प्रविष्टि का सेकंडों में जीवनकाल निर्धारित करता है। इस अवधि के बाद, कैश किया गया डेटा समाप्त हो जाता है और मूल स्रोत से दोबारा प्राप्त किया जाता है। यदि इसे छोड़ दिया जाता है, तोCacheModule.register()में दिए गए डिफ़ॉल्टttlका उपयोग होता है।
इनकी सहायता से आप यह सूक्ष्म रूप से नियंत्रित कर सकते हैं कि विशिष्ट डेटा कितनी देर तक कैश में बना रहे।
<code>CacheManager</code> के साथ मैन्युअल कैशिंग
कभी-कभी आपको CacheInterceptor द्वारा दिए जाने वाले नियंत्रण से अधिक नियंत्रण की आवश्यकता होती है, जैसे प्रतिक्रिया के कुछ हिस्सों को कैश करना या प्रोग्राम के माध्यम से कैश प्रविष्टियों को अमान्य करना।
आप CacheManager सेवा को इंजेक्ट करके उसकी विधियों का सीधे उपयोग कर सकते हैं:
import { Controller, Get, Post, Inject, Param } from '@nestjs/common';
import { Cache } from 'cache-manager';
import { CACHE_MANAGER } from '@nestjs/cache-manager';
@Controller('users')
export class UsersController {
constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}
@Get(':id')
async findOne(@Param('id') id: string) {
const cacheKey = `user_${id}`;
const cachedUser = await this.cacheManager.get(cacheKey);
if (cachedUser) {
console.log('Serving from cache!');
return cachedUser;
}
// Simulate fetching from DB
const user = { id, name: `User ${id}`, email: `user${id}@example.com` };
await this.cacheManager.set(cacheKey, user, 600); // Cache for 10 mins
console.log('Serving from DB and caching...');
return user;
}
@Post('clear-all')
async clearAllCache() {
await this.cacheManager.reset(); // Clear all cache entries
return 'Cache cleared!';
}
}कैश अमान्यकरण की रणनीतियाँ
कैशिंग का एक महत्वपूर्ण पहलू डेटा की ताज़गी सुनिश्चित करना है। पुराना डेटा गलत जानकारी दिखाए जाने का कारण बन सकता है।
- जीवनकाल (TTL): सबसे सरल रणनीति, जिसमें निर्धारित समय के बाद डेटा अपने-आप समाप्त हो जाता है।
- कैश-आधारित: एप्लिकेशन कोड पहले कैश से और डेटा न मिलने पर डेटाबेस से डेटा प्राप्त करता है, फिर कैश को अपडेट करता है।
- सीधे कैश में लेखन: डेटा को कैश और डेटाबेस, दोनों में एक साथ लिखा जाता है।
- पश्च-लेखन: डेटा पहले कैश में लिखा जाता है और फिर अतुल्यकालिक रूप से डेटाबेस में लिखा जाता है।
- इवेंट-आधारित अमान्यकरण: डेटाबेस में डेटा बदलने पर संबंधित कैश प्रविष्टि को अमान्य करने या अपडेट करने के लिए एक इवेंट ट्रिगर किया जाता है।
सही रणनीति का चुनाव आपके एप्लिकेशन की संगतता संबंधी आवश्यकताओं पर निर्भर करता है।
त्वरित जाँच: कैशिंग के लाभ
एक ऐसे NestJS API एंडपॉइंट पर विचार करें, जो डेटाबेस से लोकप्रिय उत्पादों की सूची बार-बार प्राप्त करता है। जटिल जॉइन और बड़ी मात्रा में डेटा के कारण डेटाबेस कॉल धीमी है।
Redis के साथ कैशिंग: पुनरावलोकन
बहुत अच्छा! आपने NestJS में Redis के साथ कैशिंग की मूल बातें सीख ली हैं:
- कैशिंग API के प्रदर्शन को काफ़ी बढ़ाती है, डेटाबेस पर भार कम करती है और स्केलेबिलिटी बेहतर बनाती है।
- अपनी गति और बहुमुखी प्रतिभा के कारण Redis इन-मेमोरी कैश के लिए एक उत्कृष्ट विकल्प है।
- NestJS का
CacheModule,cache-manager-redis-storeका उपयोग करके Redis इंटीग्रेशन को सरल बनाता है। - नियंत्रक की विधियों पर स्वचालित कैशिंग के लिए आप
@CacheInterceptorको@CacheKeyऔर@CacheTTLके साथ उपयोग कर सकते हैं। - अधिक नियंत्रण के लिए
CACHE_MANAGERको इंजेक्ट करके Redis के साथ मैन्युअल रूप से काम कर सकते हैं। - डेटा की ताज़गी बनाए रखने के लिए कैश अमान्यकरण की रणनीतियों को समझना महत्वपूर्ण है।
अपने NestJS एप्लिकेशन को बेहद तेज़ बनाने के लिए कैशिंग लागू करना शुरू करें!
एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 20
- पाठ
- 76
अक्सर पूछे जाने वाले प्रश्न
क्या “कैशिंग रणनीतियाँ (Redis)” पाठ निःशुल्क है?
हाँ—“कैशिंग रणनीतियाँ (Redis)” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और NestJS एंटरप्राइज़ बैकएंड API पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। NestJS एंटरप्राइज़ बैकएंड API पाठ्यक्रम में कुल 6 पाठ शामिल हैं।
“कैशिंग रणनीतियाँ (Redis)” में मैं क्या सीखूँगा?
डेटाबेस का भार कम करने और API प्रतिक्रिया समय बेहतर बनाने के लिए Redis का उपयोग करके विभिन्न कैशिंग रणनीतियाँ लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ NestJS एंटरप्राइज़ बैकएंड API का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या NestJS एंटरप्राइज़ बैकएंड API शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर NestJS एंटरप्राइज़ बैकएंड API शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 6 में से 1वाँ पाठ है।
“कैशिंग रणनीतियाँ (Redis)” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस NestJS एंटरप्राइज़ बैकएंड API पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर NestJS एंटरप्राइज़ बैकएंड API पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- कैशिंग रणनीतियाँ (Redis)
- डेटाबेस प्रदर्शन की निगरानी
- लोड संतुलन और प्रॉक्सी
- प्रश्न अनुकूलन की रणनीतियाँ
- सर्वरलेस परिनियोजन
- अपने Supabase प्रोजेक्ट को स्केल करना