583 читања
583 читања

Како савладати дистрибуирани кеш у Нест.ЈС

од стране Kamil Fronczak4m2025/04/03
Read on Terminal Reader

Предуго; Читати

@нестикис/цацхе-манагер је лагана библиотека коју покреће Редис за НестЈС. Пружа једноставан АПИ за управљање Редис кеширањем, заједно са подесивим ТТЛ-овима и подршком за напредне стратегије кеширања.
featured image - Како савладати дистрибуирани кеш у Нест.ЈС
Kamil Fronczak HackerNoon profile picture
0-item
Превише сам сати проводио борећи се са спорим АПИ и преоптерећеним базама података, тражећи решење које је ефикасно и лако имплементирати.



<п>Због тога сам био узбуђен када је Карол (<а хреф="https://github.com/karol71927">karol71927), талентовани члан наше организације отвореног кода, <а хреф="https://github.com/Nestixis">Nestixis, створио @nestixis/cache-manager.


karol71927Nestixis


<п>Ова лагана, Редис-помоћна библиотека је поједноставила кеширање у мојим НестЈС пројектима, и желим да поделим како је то направило разлику.



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 Код


Можете га подесити да уместо тога користите упите или друге критеријуме, нудећи флексибилност коју сам увек желео.ЦацхеИнтерцептор обрађује ГЕТ захтеве, док ЦацхеРемовеИнтерцептор чисти кеш на ажурирањима - елегантан и интуитиван.

L O A D I N G
. . . comments & more!

About Author

Kamil Fronczak HackerNoon profile picture
Kamil Fronczak@axotion
I’m a 2X-year-old tech dude from Poland, and this is my blog about tech stuff: NestJS, Node

ХАНГ ТАГС

ОВАЈ ЧЛАНАК ЈЕ ПРЕДСТАВЉЕН У...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks