583 ریڈنگز
583 ریڈنگز

Nest.JS میں تقسیم کیش کا مالک کیسے کریں

کی طرف سے Kamil Fronczak4m2025/04/03
Read on Terminal Reader

بہت لمبا؛ پڑھنے کے لئے

@nestixis/cache-manager NestJS کے لئے ایک ہلکا، Redis-powered لائبریری ہے.It provides a simple API for managing Redis caching, complete with configurable TTLs and support for advanced caching strategies.
featured image - Nest.JS میں تقسیم کیش کا مالک کیسے کریں
Kamil Fronczak HackerNoon profile picture
0-item

کیشنگ کسی بھی ڈویلپر کی طرف کانٹا بن سکتی ہے۔ میں نے سست APIs اور زیادہ بوجھ والے ڈیٹا بیس کے ساتھ کشتی کرتے ہوئے بہت سارے گھنٹے گزارے ہیں، ایک ایسے حل کی تلاش میں جو موثر اور لاگو کرنا آسان ہو۔


یہی وجہ ہے کہ جب ہماری اوپن سورس آرگنائزیشن Nestixis کے ایک باصلاحیت رکن Karol ( karol71927 ) نے @nestixis/cache-manager بنایا تو میں بہت خوش ہوا۔


اس ہلکی پھلکی، Redis سے چلنے والی لائبریری نے میرے NestJS پروجیکٹس میں کیشنگ کو ہموار کیا ہے، اور میں یہ بتانے کے لیے بے چین ہوں کہ اس نے کیسے فرق کیا ہے۔


چیلنج: NestJS میں کیشنگ کی پیچیدگی

منظر نامہ بہت واقف ہے: آپ کی ایپلیکیشن اس وقت تک آسانی سے چلتی ہے جب تک کہ ٹریفک میں اضافہ نہ ہو جائے، اور اچانک آپ کا ڈیٹا بیس بوجھ تلے دب جائے۔ کیشنگ ایک واضح حل ہے — ڈیٹا کو ایک بار اسٹور کریں، اسے جلدی سے پیش کریں — لیکن اسے NestJS میں ضم کرنا اکثر بوجھل محسوس ہوتا ہے۔ Redis طاقتور صلاحیتیں پیش کرتا ہے، لیکن اسے ترتیب دینے میں عام طور پر گھمبیر کنفیگریشنز، میعاد ختم ہونے کی پالیسیوں کا انتظام، اور حسب ضرورت کیش کیز کی وضاحت شامل ہوتی ہے۔

مجھے ایک ایسے ٹول کی ضرورت تھی جو اس عمل کو آسان بناتا ہے جبکہ کیش ہونے والی چیزوں پر قطعی کنٹرول کی اجازت دیتا ہے، جیسے درخواست کے پیرامیٹرز یا سوالات۔


لہذا، Karol نے @nestixis/cache-manager کو ڈیزائن کیا تاکہ ان درد کے نکات کو صاف، موثر انداز میں حل کیا جا سکے۔ یہ پیکج Redis کیشنگ کے انتظام کے لیے ایک سیدھا سادہ API فراہم کرتا ہے، قابل ترتیب TTLs کے ساتھ مکمل اور اعلی درجے کی کیشنگ حکمت عملیوں کے لیے سپورٹ۔ یہ اس کے GitHub repo پر دستیاب ہے، اور اس کا ڈیزائن عملی، دوبارہ قابل استعمال ٹولز کے لیے ہماری ٹیم کے عزم کی عکاسی کرتا ہے۔

شروع کرنا: ہموار سیٹ اپ

انسٹالیشن اتنا ہی آسان ہے جتنا اسے ملتا ہے:


 npm i @nestixis/cache-manager


اسے اپنی NestJS ایپ میں ضم کرنے کے لیے، اسے ایک ماڈیول میں رجسٹر کریں:


 import { Module } from '@nestjs/common'; import { CacheModule } from '@nestixis/cache-manager'; import { ConfigModule, ConfigService } from '@nestjs/config'; @Module({ imports: [ CacheModule.registerAsync({ isGlobal: true, imports: [ConfigModule], useFactory: (configService: ConfigService) => ({ redis: { host: configService.get('REDIS_HOST') || 'localhost', port: +configService.get('REDIS_PORT') || 6379, }, cachePrefix: 'cache:', defaultCacheTTL: 1000, // 1-second default }), inject: [ConfigService], }), ], }) export class AppModule {}


یہ کم سے کم کوشش کے ساتھ آپ کی ایپ میں Redis کیشنگ کو ترتیب دیتا ہے۔ وہاں سے، آپ کسی خدمت میں دستی طور پر اس کے ساتھ تعامل کر سکتے ہیں:


 import { Injectable } from '@nestjs/common'; import { CacheManager } from '@nestixis/cache-manager'; @Injectable() export class MyService { constructor(private readonly cacheManager: CacheManager) {} async getData(key: string) { const cached = await this.cacheManager.get(key); if (cached) return cached; const data = await this.fetchData(); await this.cacheManager.add(key, data, 1000); // Cache for 1 second return data; } async clearData(key: string) { await this.cacheManager.remove(key); } private fetchData() { return new Promise((resolve) => setTimeout(() => resolve('Data'), 2000)); } }


جو چیز اس پیکج کو الگ کرتی ہے وہ مخصوص درخواست کی تفصیلات کی بنیاد پر کیش کرنے کی صلاحیت ہے- ایک خصوصیت جس میں کرول سوچ سمجھ کر شامل ہے۔ یہ لو

کنٹرولر:


 import { Controller, Get, Post, Delete, Param, UseInterceptors } from '@nestjs/common'; import { CacheInterceptor, CacheRemoveInterceptor, CacheTrackBy } from '@nestixis/cache-manager'; import { MyService } from './my.service'; @Controller('site/:token') @CacheTrackBy({ prefix: 'site', ttl: 10000, // 10 seconds by: [ { by: 'param', name: 'token', }, ], }) export class SiteController { constructor(private readonly service: MyService) {} @Get() @UseInterceptors(CacheInterceptor) async get(@Param('token') token: string) { return this.service.getData(`site:${token}`); } // Will clear cache on add or remove of resource to keep fresh state @Post() @UseInterceptors(CacheRemoveInterceptor) async add(@Param('token') token: string) { await this.service.getData(`site:${token}`); // Refresh data } @Delete() @UseInterceptors(CacheRemoveInterceptor) async remove(@Param('token') token: string) { await this.service.clearData(`site:${token}`); } }


@CacheTrackBy ڈیکوریٹر یہاں کی کلید ہے۔ یہ یقینی بناتا ہے کہ کیشنگ کو :token پیرامیٹر سے منسلک کیا گیا ہے، لہذا /site/abc اور /site/xyz ہر ایک کو اپنی کیش انٹری مل جاتی ہے۔


آپ اس کی بجائے استفسارات یا دیگر معیارات استعمال کرنے کے لیے اسے ایڈجسٹ کر سکتے ہیں، اس لچک کی پیشکش کرتے ہوئے جو میں ہمیشہ چاہتا تھا۔ CacheInterceptor GET کی درخواستوں کو ہینڈل کرتا ہے، جبکہ CacheRemoveInterceptor اپ ڈیٹس پر کیشے کو صاف کرتا ہے — خوبصورت اور بدیہی۔

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks