"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > कस्टम `@Cacheable` डेकोरेटर के साथ अपने Nest.js प्रदर्शन को बेहतर बनाएं

कस्टम `@Cacheable` डेकोरेटर के साथ अपने Nest.js प्रदर्शन को बेहतर बनाएं

2024-11-01 को प्रकाशित
ब्राउज़ करें:248

Enhance Your Nest.js Performance with a Custom `@Cacheable` Decorator

कैशिंग आपके अनुप्रयोगों के प्रदर्शन और स्केलेबिलिटी को बेहतर बनाने के लिए एक मौलिक तकनीक है। Nest.js में, कैशिंग को अंतर्निहित कैश प्रबंधक का उपयोग करके सहजता से एकीकृत किया जा सकता है। इस लेख में, हम यह पता लगाएंगे कि आपकी Nest.js सेवाओं या नियंत्रकों में कैशिंग को सरल बनाने के लिए एक कस्टम @Cacheable डेकोरेटर कैसे बनाया जाए।

? कस्टम @कैशएबल डेकोरेटर का उपयोग क्यों करें?

जबकि Nest.js बॉक्स से बाहर शक्तिशाली कैशिंग तंत्र प्रदान करता है, सीधे आपके तरीकों के भीतर कैशिंग तर्क लागू करने से आपका कोड अव्यवस्थित हो सकता है। एक कस्टम डेकोरेटर इस तर्क को अमूर्त कर देता है, जिससे आपका कोड साफ-सुथरा और अधिक रखरखाव योग्य बन जाता है।

? @Cacheable डेकोरेटर बनाना

आइए @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 डेकोरेटर का उपयोग करना

यहां बताया गया है कि आप @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()
}

? स्पष्टीकरण

  • डेकोरेटर एप्लिकेशन: @Cacheable डेकोरेटर को एक विशिष्ट कैश कुंजी के साथ getSettings() विधि पर लागू किया जाता है।
  • निर्भरता इंजेक्शन: कैश प्रबंधक को डेकोरेटर द्वारा उपयोग की जाने वाली सेवा में इंजेक्ट किया जाता है।

? Nest.js में कैश मैनेजर को एकीकृत करना

अपने एप्लिकेशन में कैश मैनेजर का उपयोग करने के लिए, आपको इसे अपने मॉड्यूल में पंजीकृत करना होगा:

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 {}

? स्पष्टीकरण

  • ग्लोबल कैश: सेटिंग isGlobal: true कैश मैनेजर को आपके पूरे एप्लिकेशन में उपलब्ध कराती है।
  • टीटीएल और अधिकतम आइटम: कैश में टाइम-टू-लाइव (टीटीएल) और आइटम की अधिकतम संख्या (अधिकतम) कॉन्फ़िगर करें।

? कैश मैनेजर को इंजेक्ट करना

सुनिश्चित करें कि आप कैश मैनेजर को किसी भी सेवा या नियंत्रक में इंजेक्ट करते हैं जो @Cacheable डेकोरेटर का उपयोग करता है:

import { Injectable } from '@nestjs/common';
import { Cache } from 'cache-manager';

@Injectable()
export class SettingsService {
  constructor(private readonly cacheManager: Cache) {}

  // ... your methods
}

? निष्कर्ष

एक कस्टम @ कैशएबल डेकोरेटर बनाकर, आप अपने तरीकों को साफ रख सकते हैं और मुख्य तर्क पर ध्यान केंद्रित कर सकते हैं, जिससे कैशिंग संबंधी चिंताएं डेकोरेटर पर छोड़ दी जाती हैं। यह दृष्टिकोण कोड पठनीयता और रखरखाव को बढ़ाता है, जिससे आपका Nest.js एप्लिकेशन अधिक कुशल और स्केलेबल बन जाता है।

बेझिझक नीचे टिप्पणी या प्रश्न छोड़ें। हैप्पी कोडिंग! ?

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/marrouchi/enhance-your-nestjs-performance-with-a-custom-cacheable-decorator-589o?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163.com पर संपर्क करें। इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3