The Challenge: Caching Complexity у НестЈС
Сценарио је превише познат: ваша апликација ради глатко док се саобраћај не повећа, а одједном се ваша база података заглави под оптерећењем.Цацхинг је очигледна поправка – складиштење података једном, сервирајте их брзо – али интеграција у НестЈС-у често се осећа тешким.Редис нуди моћне могућности, али њено постављање обично укључује свађање конфигурација, управљање политикама истека и дефинисање прилагођених кључева за кеш.
Требао ми је алат који је поједноставио процес, док је омогућио прецизну контролу над оним што се кешира, као што су параметри захтјева или упита.
Дакле, Карол је дизајнирао @нестиксис/цацхе-менејџер да се бави овим тачкама бола са чистим, ефикасним приступом. Овај пакет пружа једноставан АПИ за управљање Редис кеширањем, комплетан са конфигурираним ТТЛ-овима и подршком за напредне стратегије кеширања. Доступан је на <а хреф="https://github.com/nestixis/цацхе-менејџер">свог ГитХуб репо, а његов дизајн одражава посвећеност нашег тима практичним, поновљеним алатима.
ова ГитХуб репоПочиње: Непрестано подешавање
Инсталација је једноставна као што добија:
npm i @nestixis/cache-manager
npm i @nestixis/cache-manager
Да бисте га интегрисали у своју НестЈС апликацију, региструјте га у модулу:
import { Module } iz '@nestjs/common'; import { CacheModule } iz '@nestixis/cache-manager'; import { ConfigModule, ConfigService } iz '@nestjs/config'; @Module({ imports: [ CacheModule.registerAsync({ isGlobal: true, imports: [ConfigModule], useFactory: (configService: ConfigService) => ({ redis: { host: configService.get('REDIS_HOST')', t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t timport { Module } from '@nestjs/common'; import { CacheModule } from '@nestixis/cache-manager'; import { ConfigModule, ConfigService } from '@nestjs/javascript'; @Module({ imports: [ CacheModule.registerAsync({ isGlobal: true, imports: [ConfigModule], useFactory: (configService: ConfigService) => ({ redis: { host: configService.get('REDIS_HOST'))
Ово поставља Редис кеширање преко ваше апликације са минималним напором.Одатле можете ручно да комуницирате са њим у служби:
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 = wait this.cacheManager.get(key); if (cached) return cached; const = data await this.fetchData(); wait this.cacheMancheager.add(key, data, 1000); // Cache for 1 second return data; } async clearData(key: string) { await thisMancheManager.remove(key); } private fetchData() { return new Promiseimport { 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 = wait this.cacheManager.get(key); if (cached) return cached; const data = wait this.fetchData(); wait this.cacheManager.add(key, data, 1000); // Cache for 1 second return data; } async clearData(key: string) wait { this.cacheManager.remover.get(key); } private fetchData() return { New Promise((resol
Оно што разликује овај пакет је његова способност да кешира на основу специфичних детаља захтјева - функција Карол је пажљиво укључена.
контролер:
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({ префикс:'site', ttl: 10000, // 10 секунди од: { by: 'param', ime: 'token', }, }, }) export class SiteController {constructor(private readonly service: MyService) } from './my.service'; @Controller('site/:token string)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({ префикс:'site', ttl: 10000, // 10 секунди од: { by: 'param', ime: 'token', }, }, }) export class SiteController {constructor(private readonly service: MyService) } {{CacheInterceptor(CacheInterceptor) string @{{CacheIntercep
The @CacheTrackBy
декоратор је кључ овде. Он осигурава да је кеширање везано за :токен параметар, тако да /site/abc и /site/xyz сваки добијају свој улаз у кеш.
@CacheTrackBy
Код
Можете га подесити да уместо тога користите упите или друге критеријуме, нудећи флексибилност коју сам увек желео.ЦацхеИнтерцептор обрађује ГЕТ захтеве, док ЦацхеРемовеИнтерцептор чисти кеш на ажурирањима - елегантан и интуитиван.