Можете ли вы настроить TTL кеша NestJS для каждой конечной точки? - PullRequest
0 голосов
/ 09 октября 2019

В настоящее время я использую механизм кэширования NestJS, как описано в документации: https://docs.nestjs.com/techniques/caching

Используя это, я могу настроить кэширование всего модуля следующим образом:

CacheModule.register({
  ttl: 5, // seconds
  max: 10, // maximum number of items in cache
});

Однако существуют определенные конечные точки , которые я хочу кэшировать в течение более длительного периода времени, чем остальные. (например, длительные операции, которые не меняются так часто, как другие)

Нечто подобное было описано здесь: https://github.com/nestjs/nest/issues/695, но похоже, что оно было закрыто без реального решения всей проблемы.

Я представляю что-то вроде:

@Cache({ ttl: 600 })
@Get()
findAll(): string[] {
  return service.longRunningOperation();
}

Есть мысли?

1 Ответ

0 голосов
/ 18 октября 2019

Контроль ttl-кеша декоратором пока не поддерживается. В github есть запрос функции , чтобы включить это в будущую версию.

Но вы можете использовать более подробный подход для решения этой проблемы. Вставьте объект cache-manager в ваши конструкторы контроллеров и используйте функцию 'wrap' на каждом желаемом маршруте:

constructor(
  @Inject(CACHE_MANAGER) private cacheManager
) {}

@Get()
async get(): Promise<any> {
  const customers = await this.cacheManager.wrap(
    '/customers',
    function() {
      return service.longRunningOperation()
    },
    { ttl: 600 }
  )
  return customers
}
...