📖 Scenario: You are building a NestJS application that needs to store temporary data to speed up responses. You will set up the CacheModule to enable caching in your app.
🎯 Goal: Set up the CacheModule in a NestJS application to enable caching with a default time-to-live (TTL) of 5 seconds.
📋 What You'll Learn
Import CacheModule from '@nestjs/common'
Register CacheModule in the root module with a TTL of 5 seconds
Use the CacheModule in the AppModule imports array
💡 Why This Matters
🌍 Real World
Caching helps speed up web applications by storing data temporarily so it can be reused quickly without recalculating or fetching it again.
💼 Career
Many backend jobs require setting up caching to improve app performance and reduce server load, making this a valuable skill for NestJS developers.
Progress0 / 4 steps
1
Import CacheModule
Import CacheModule from '@nestjs/common' at the top of your app.module.ts file.
NestJS
Hint
Use the import statement to bring CacheModule from '@nestjs/common'.
2
Register CacheModule with TTL
Inside the @Module decorator, add CacheModule.register({ ttl: 5 }) to the imports array in AppModule.
NestJS
Hint
Use CacheModule.register with an object setting ttl to 5 inside the imports array.
3
Add a simple service to use cache
Create a service class called AppService with a method getHello() that returns the string 'Hello World!'. Add AppService to the providers array in AppModule.
NestJS
Hint
Define AppService with a getHello() method returning 'Hello World!'. Add it to providers.
4
Use CacheInterceptor globally
Import CacheInterceptor and APP_INTERCEPTOR from '@nestjs/common'. Add a provider to AppModule that sets provide: APP_INTERCEPTOR and useClass: CacheInterceptor to enable caching globally.
NestJS
Hint
Use APP_INTERCEPTOR token with CacheInterceptor in providers to enable global caching.
Practice
(1/5)
1. What is the main purpose of importing CacheModule in a NestJS application?
easy
A. To enable temporary storage of data to speed up responses
B. To connect to a database automatically
C. To handle user authentication
D. To manage application logging
Solution
Step 1: Understand CacheModule's role
CacheModule is used to store data temporarily to reduce repeated processing.
Step 2: Compare with other options
It does not handle database, authentication, or logging directly.
Final Answer:
To enable temporary storage of data to speed up responses -> Option A
Quick Check:
CacheModule = temporary data storage [OK]
Hint: CacheModule is about caching data, not databases or auth [OK]
Common Mistakes:
Confusing CacheModule with database modules
Thinking CacheModule manages authentication
Assuming CacheModule handles logging
2. Which of the following is the correct way to import and register CacheModule with a TTL of 5 seconds in a NestJS module?
easy
A. CacheModule.register({ ttl: 5 })
B. CacheModule.forRoot({ ttl: 5 })
C. CacheModule.setup({ ttl: 5 })
D. CacheModule.init({ ttl: 5 })
Solution
Step 1: Recall CacheModule registration method
CacheModule uses the static method register to configure options like ttl.
Step 2: Verify method names
Methods like forRoot, setup, or init are not used by CacheModule.
Final Answer:
CacheModule.register({ ttl: 5 }) -> Option A
Quick Check:
Use register() to configure CacheModule [OK]
Hint: CacheModule uses register(), not forRoot() or init() [OK]
Common Mistakes:
Using forRoot() instead of register()
Using setup() or init() which do not exist
Forgetting to pass options inside register()
3. Given this NestJS module setup:
import { CacheModule, Module } from '@nestjs/common';
@Module({
imports: [CacheModule.register({ ttl: 10 })],
})
export class AppModule {}
What will be the effect of the ttl: 10 option?
medium
A. Cache entries expire after 10 minutes
B. Cache entries expire after 10 seconds
C. Cache entries never expire
D. Cache entries expire immediately
Solution
Step 1: Understand ttl meaning in CacheModule
The ttl option sets the time-to-live in seconds for cached data.
Step 2: Interpret ttl: 10
Since ttl is 10, cached data expires after 10 seconds.
Final Answer:
Cache entries expire after 10 seconds -> Option B
Quick Check:
ttl = seconds cache lives [OK]
Hint: ttl value is in seconds, not minutes [OK]
Common Mistakes:
Assuming ttl is in minutes
Thinking ttl disables expiration
Confusing ttl with cache size
4. Identify the error in this CacheModule setup:
import { CacheModule, Module } from '@nestjs/common';
@Module({
imports: [CacheModule.register({ ttl: '20' })],
})
export class AppModule {}
medium
A. register() method does not accept options
B. CacheModule cannot be imported from '@nestjs/common'
C. ttl should be a number, not a string
D. Module decorator is missing parentheses
Solution
Step 1: Check ttl option type
ttl expects a number representing seconds, not a string.
Step 2: Verify other parts
CacheModule import and Module decorator usage are correct; register() accepts options.
Final Answer:
ttl should be a number, not a string -> Option C
Quick Check:
ttl must be numeric [OK]
Hint: ttl must be a number, not quoted text [OK]
Common Mistakes:
Passing ttl as a string instead of number
Thinking register() has no parameters
Misusing import paths
5. You want to cache HTTP GET responses in a NestJS controller using CacheModule with a global TTL of 15 seconds. Which setup correctly applies caching to all routes in the module?
hard
A. Import CacheModule with ttl 15 and manually store cache in each method
B. Import CacheModule with ttl 15 and add @Cacheable() decorator on each method
C. Import CacheModule with ttl 15 and add @Cache() decorator on the module
D. Import CacheModule with ttl 15 and add @UseInterceptors(CacheInterceptor) on the controller
Solution
Step 1: Understand CacheModule and CacheInterceptor usage
CacheModule provides caching, and CacheInterceptor applies caching behavior to routes.
Step 2: Apply CacheInterceptor globally on controller
Using @UseInterceptors(CacheInterceptor) on the controller enables caching for all its routes.
Step 3: Evaluate other options
No @Cacheable() or @Cache() decorators exist in NestJS core; manual caching is possible but not automatic.
Final Answer:
Import CacheModule with ttl 15 and add @UseInterceptors(CacheInterceptor) on the controller -> Option D
Quick Check:
Use CacheInterceptor with CacheModule for route caching [OK]
Hint: Use CacheInterceptor decorator to enable caching on controllers [OK]
Common Mistakes:
Using non-existent decorators like @Cacheable or @Cache
Not applying CacheInterceptor to controller or routes
Trying manual caching instead of interceptor
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.