कैशिंग आपके अनुप्रयोगों के प्रदर्शन और स्केलेबिलिटी को बेहतर बनाने के लिए एक मौलिक तकनीक है। Nest.js में, कैशिंग को अंतर्निहित कैश प्रबंधक का उपयोग करके सहजता से एकीकृत किया जा सकता है। इस लेख में, हम यह पता लगाएंगे कि आपकी Nest.js सेवाओं या नियंत्रकों में कैशिंग को सरल बनाने के लिए एक कस्टम @Cacheable डेकोरेटर कैसे बनाया जाए।
जबकि Nest.js बॉक्स से बाहर शक्तिशाली कैशिंग तंत्र प्रदान करता है, सीधे आपके तरीकों के भीतर कैशिंग तर्क लागू करने से आपका कोड अव्यवस्थित हो सकता है। एक कस्टम डेकोरेटर इस तर्क को अमूर्त कर देता है, जिससे आपका कोड साफ-सुथरा और अधिक रखरखाव योग्य बन जाता है।
आइए @Cacheable डेकोरेटर बनाकर शुरुआत करें जिसका उपयोग हम अपनी विधियों के परिणामों को कैश करने के लिए करेंगे।
import { Cache } from 'cache-manager'; export function Cacheable(cacheKey: string) { return function ( target: any, propertyName: string, descriptor: PropertyDescriptor, ) { const originalMethod = descriptor.value; descriptor.value = async function (...args: any[]) { const cache: Cache = this.cacheManager; if (!cache) { throw new Error( 'Cannot use Cacheable() decorator without injecting the cache manager.', ); } // Try to get cached data try { const cachedResult = await cache.get(cacheKey); if (cachedResult) { return cachedResult; } } catch (error) { console.error(`Cache get error for key: ${cacheKey}:`, error); } // Call the original method if cache miss const result = await originalMethod.apply(this, args); // Set the new result in cache try { await cache.set(cacheKey, result); } catch (error) { console.error(`Cache set error for key: ${cacheKey}:`, error); } return result; }; return descriptor; }; }
यहां बताया गया है कि आप @Cacheable डेकोरेटर को अपनी सेवा में किसी विधि पर कैसे लागू कर सकते हैं:
import { Injectable } from '@nestjs/common'; import { Cacheable } from './cacheable.decorator'; const SETTING_CACHE_KEY = 'settings'; @Injectable() export class SettingsService { // Inject the cache manager constructor(private readonly cacheManager: Cache) {} /** * Retrieves settings from the cache if available, or loads them from the * repository and caches the result. * * @returns A promise that resolves to a `Settings` object. */ @Cacheable(SETTING_CACHE_KEY) async getSettings(): Promise{ return await this.findAll(); } // ... other methods like findAll() and buildTree() }
अपने एप्लिकेशन में कैश मैनेजर का उपयोग करने के लिए, आपको इसे अपने मॉड्यूल में पंजीकृत करना होगा:
import { Module } from '@nestjs/common'; import { CacheModule } from '@nestjs/cache-manager'; import { SettingsService } from './settings.service'; @Module({ imports: [ CacheModule.register({ isGlobal: true, ttl: 300, // Time to live in seconds max: 100, // Maximum number of items in cache }), ], providers: [SettingsService], }) export class AppModule {}
सुनिश्चित करें कि आप कैश मैनेजर को किसी भी सेवा या नियंत्रक में इंजेक्ट करते हैं जो @Cacheable डेकोरेटर का उपयोग करता है:
import { Injectable } from '@nestjs/common'; import { Cache } from 'cache-manager'; @Injectable() export class SettingsService { constructor(private readonly cacheManager: Cache) {} // ... your methods }
एक कस्टम @ कैशएबल डेकोरेटर बनाकर, आप अपने तरीकों को साफ रख सकते हैं और मुख्य तर्क पर ध्यान केंद्रित कर सकते हैं, जिससे कैशिंग संबंधी चिंताएं डेकोरेटर पर छोड़ दी जाती हैं। यह दृष्टिकोण कोड पठनीयता और रखरखाव को बढ़ाता है, जिससे आपका Nest.js एप्लिकेशन अधिक कुशल और स्केलेबल बन जाता है।
बेझिझक नीचे टिप्पणी या प्रश्न छोड़ें। हैप्पी कोडिंग! ?
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3