Ang caching ay maaaring maging isang thorn sa side ng anumang developer. I've spent too many hours struggling with slow APIs and overloaded databases, paghahanap ng isang solusyon na ang parehong mahusay at madaling i-implementate.
Ito ang dahilan kung bakit ako ay excited kapag si Karol (karol71927), isang talentado na miyembro ng aming open-source organisasyon, Nestixis, lumikha ng @nestixis/cache-manager.
karol71927Nestixis
Ang lightweight na, Redis-powered library na ito ay nagtataguyod ng caching sa aking mga proyekto ng NestJS, at ako ay nag-aalok upang ibahagi kung paano ito ay ginawa ng isang pagkakaiba.
The Challenge: Caching Complexity sa NestJS
Ang scenario ay ganap na kilala: ang iyong application ay gumagana nang malusog hanggang sa bumalik ng traffic, at pagkatapos ay ang iyong database ay bumalik sa ilalim ng pag-load. Caching ay ang karaniwang solusyon—maglagay ng data isang beses, ibinibigay ito ng mabilis— ngunit ang pag-integrasyon sa NestJS ay karaniwang nakakaapekto. Redis ay nag-aalok ng malakas na mga kakayahan, ngunit ang pag-setup ng ito ay karaniwang nagtatrabaho sa pagbabago ng mga konfigurasyon, pag-manage ng mga patakaran ng pagkuha, at itinatag ng mga custom cache keys.
Kailangan ko ng isang tool na sinusuportahan ang proseso habang nagbibigay-daan ng presyonal na kontrol sa kung ano ang cache, tulad ng mga parameter ng request o mga query.
So, si Karol ay lumikha ng @nestixis/cache-manager upang matugunan ang mga punto ng sakit na ito sa isang clean, efficient na paraan. Ang pakete na ito ay nagbibigay ng isang simpleng API para sa pag-manage ng Redis caching, kumpletong sa configurable TTLs at suporta para sa advanced caching strategies. Ito ay magagamit sa sa GitHub repo, at ang kanyang disenyo ay nagpapakita ng aming mga commitment sa practical, reusable tools.
sa GitHub repoGetting Started: Seamless Setup
sa pamamagitan ngAng pag-install ay tulad ng simpleng kung saan ito makakuha ng:
npm i @nestixis/cache-manager
npm i @nestixis/cache-manager
Para sa pag-integrate ito sa iyong NestJS app, mag-register ito sa isang module:
import { Module } mula sa '@nestjs/common'; import { CacheModule } mula sa '@nestixis/cache-manager'; import { ConfigModule, ConfigService } mula sa '@nestjs/config'; @Module({ imports: [ CacheModule.registerAsync({ isGlobal: true, imports: [ConfigModule], useFactory: (configService: ConfigService) => ({ redis: { host: configService.get('REDIS_HOST')', tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloy tuloyimport { Module } mula sa '@nestjs/common'; import { CacheModule } mula sa '@nestixis/cache-manager'; import { ConfigModule, ConfigService } mula sa '@nestjs/javascript'; @Module({ imports: [ CacheModule.registerAsync({ isGlobal: true, imports: [ConfigModule], useFactory: (configService: ConfigService) => ({ redis: { host: configService.get('REDIS_HOST')
Ito ayusin ang Redis caching sa lahat ng iyong app sa isang minimum na effort. Mula dito, maaari mong mag-interact sa kanya manually sa isang serbisyo:
import { Injectable } mula sa '@nestjs/common'; import { CacheManager } mula sa '@nestixis/cache-manager'; @Injectable() export class MyService { constructor(private readonly cacheManager: CacheManager) {} async getData(key: string) { const cached = wait this.cacheManager.get(key); if (cached) return cached; const = data await this.fetchData(); wait this.cacheMancheManager.add(key, data, 1000); // Cache para sa 1 second return data; } async clearData(key: string) { await.cacheMancheManager.remove(key); } private fetchDataimport { Injectable } mula sa '@nestjs/common'; import { CacheManager } mula sa '@nestixis/cache-manager'; @Injectable() export class MyService { constructor(private readonly cacheManager: CacheManager) {} async getData(key: string) { const cached = wait this.cacheManager.get(key); if (cached) return cached; const data = wait this.fetchData(); wait this.cacheManager.add(key, data, 1000); // Cache para sa 1 second return data; } async clearData(key: string) wait { this.cacheManager.remager.get(key); } private fetchData() return {New Promise
Ang nagtataguyod ng pakete na ito ay ang kanyang kakayahan sa pag-cache batay sa mga detalye ng anumang request—ang isang tampok na Karol ay pinagsasama.ang napili ng mga taga-hanga:
import { Controller, Get, Post, Delete, Param, UseInterceptors } mula sa '@nestjs/common'; import { CacheInterceptor, CacheRemoveInterceptor, CacheTrackBy } mula sa '@nestixis/cache-manager'; import { MyService } mula sa './my.service'; @Controller('site/:token) @CacheTrackBy({ prefix:'site', ttl: 10000, // 10 segundo sa pamamagitan ng: {by: 'param', pangalan: 'token', }, }, }) export class SiteController {constructor(private readonly service: MyService) } mula sa './my.service'; @Controller('site/:import { Controller, Get, Post, Delete, Param, UseInterceptors } mula sa '@nestjs/common'; import { CacheInterceptor, CacheRemoveInterceptor, CacheTrackBy } mula sa '@nestixis/cache-manager'; import { MyService } mula sa './my.service'; @Controller('site/:token') @CacheTrackBy({ prefix:'site', ttl: 10000, // 10 segundo mula sa: { sa pamamagitan ng: 'param', pangalan: 'token', }, }, }) export class SiteController {constructor(private read-only service: MyService) } {Get() @UseInterceptors(CacheInterceptor)
Ang @CacheTrackBy
decorator ay ang key dito. Ito ay nagbibigay ng caching ay nakatuon sa :token parameter, kaya /site/abc at /site/xyz bawat makakuha ng kanilang sarili na cache entry.
@CacheTrackBy
Mag-regulate ito upang gamitin ang mga query o iba pang mga criteria sa halip, na nag-aalok ng ang flexibility na gusto ko na lang. Ang CacheInterceptor ay nagtatrabaho sa mga request ng GET, habang ang CacheRemoveInterceptor ay nag-clear ng cache sa mga update - elegant at intuitive.