давайте углубимся в кэширование в NestJS 🚀

Кэширование является важным аспектом любого веб-приложения. Это помогает повысить производительность и скорость отклика вашего приложения за счет сохранения и повторного использования результатов дорогостоящих операций.

В этом уроке мы узнаем, как реализовать кэширование в вашем приложении NestJS, используя встроенные функции кэширования.

  • Установите пакет кэширования: установите пакет cache-manager и его типизацию:
npm install --save cache-manager
npm install --save-dev @types/cache-manager
  • Импортируйте CacheModule: в app.module.ts импортируйте CacheModule и настройте для него стратегию кэширования, которую вы хотите использовать. Например, вы можете использовать кэш в памяти:
import { Module } from '@nestjs/common';
import { CacheModule } from '@nestjs/common';

@Module({
  imports: [
    CacheModule.register({
      store: 'memory',
      max: 100, // maximum number of items in cache
      ttl: 60, // time-to-live in seconds
    }),
  ],
})
export class AppModule {}
  • Внедрите CacheManager: в свои службы внедрите CacheManager с помощью декоратора @Inject():
import { Injectable, Inject, CACHE_MANAGER } from '@nestjs/common';
import { Cache } from 'cache-manager';

@Injectable()
export class SomeService {
  constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}
  // Your service logic here.
}
  • Используйте CacheManager для кэширования данных: используйте экземпляр cacheManager для хранения и извлечения кэшированных данных. Например, вы можете кэшировать результат HTTP-запроса:
async getData(): Promise<any> {
  const cachedData = await this.cacheManager.get('data_key');
  if (cachedData) {
    return cachedData;
  }
  const fetchedData = await this.httpService.get('https://api.example.com/data').toPromise();
  await this.cacheManager.set('data_key', fetchedData, { ttl: 60 });
  return fetchedData;
}
  • CacheInterceptor: вы также можете использовать CacheInterceptor для автоматического кэширования результатов действий контроллера. Для этого добавьте перехватчик в свой контроллер:
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { CacheInterceptor } from '@nestjs/common';

@Controller('data')
@UseInterceptors(CacheInterceptor)
export class DataController {
  @Get()
  getData() {
    // Your data fetching logic here.
  }
}

Вот и все! Теперь вы реализовали кэширование в своем приложении NestJS 🎉 Это поможет повысить производительность вашего приложения за счет уменьшения потребности в дорогостоящих операциях и снижения нагрузки на ваш сервер.