📖 Scenario: You are building a simple NestJS service that caches user data to improve response speed. You want to start with an in-memory cache and then add Redis as a cache store for better performance in production.
🎯 Goal: Build a NestJS service that uses the built-in cache module with memory store first, then configure it to use Redis as the cache store.
📋 What You'll Learn
Create a NestJS cache module with in-memory cache
Add a configuration variable for Redis connection URL
Implement Redis cache store using the configuration
Complete the cache module setup to use Redis store
💡 Why This Matters
🌍 Real World
Caching improves app speed by storing frequently accessed data in fast storage like memory or Redis.
💼 Career
Many backend jobs require knowledge of caching strategies and integrating Redis with frameworks like NestJS.
Progress0 / 4 steps
1
Set up NestJS CacheModule with in-memory store
Import CacheModule from @nestjs/common and register it in the AppModule with default in-memory cache by calling CacheModule.register() inside the @Module imports array.
NestJS
Hint
Use CacheModule.register() inside the imports array of @Module.
2
Add Redis connection URL configuration
Create a constant variable called redisUrl and set it to the string 'redis://localhost:6379' to hold the Redis server URL.
NestJS
Hint
Define const redisUrl = 'redis://localhost:6379' above the @Module decorator.
3
Configure CacheModule to use Redis store
Import redisStore from cache-manager-redis-store. Update CacheModule.register() to use store: redisStore and url: redisUrl inside the options object.
NestJS
Hint
Use CacheModule.register({ store: redisStore, url: redisUrl }) in the imports array.
4
Complete CacheModule setup with Redis store
Ensure the AppModule imports array contains CacheModule.register configured with store: redisStore and url: redisUrl. Export the AppModule class.
NestJS
Hint
Make sure the CacheModule.register call includes Redis store and URL, and AppModule is exported.
Practice
(1/5)
1. What is the main advantage of using Redis as a cache store in a NestJS application compared to in-memory cache?
easy
A. Redis does not support expiration of cached data.
B. Redis cache is stored only in the local app memory.
C. Redis allows sharing cached data across multiple app instances.
D. Redis cache clears automatically every second.
Solution
Step 1: Understand in-memory cache scope
In-memory cache stores data only inside the app instance's memory, so it is not shared.
Step 2: Understand Redis cache scope
Redis is a separate server that multiple app instances can connect to, sharing cached data.
Final Answer:
Redis allows sharing cached data across multiple app instances. -> Option C
Quick Check:
Redis cache is shared [OK]
Hint: Redis shares cache across servers; memory cache is local only [OK]
Common Mistakes:
Thinking in-memory cache shares data between servers
Believing Redis cache is local to one app instance
Assuming Redis cache clears every second automatically
2. Which of the following is the correct way to import and register the Redis cache store in a NestJS module?
easy
A. CacheModule.forRoot({ type: 'redis', url: 'redis://localhost:6379' })
B. CacheModule.register({ store: 'redis', host: 'localhost', port: 6379 })
C. CacheModule.useRedis({ host: 'localhost', port: 6379 })
D. CacheModule.registerRedis({ url: 'redis://localhost:6379' })
Solution
Step 1: Recall NestJS CacheModule syntax
CacheModule.register() is used to configure cache with options including store type and connection details.
Step 2: Identify correct Redis store option
Using store: 'redis' with host and port is the correct way to set Redis cache in NestJS.
But your app throws a connection error. What is the likely cause?
medium
A. The port should be a number, not a string.
B. Redis store does not support host option.
C. CacheModule.register cannot be used for Redis.
D. Missing password option causes connection failure.
Solution
Step 1: Check data types in config
Port should be a number (6379), not a string ('6379'), or connection fails.
Step 2: Validate other options
Host is valid, CacheModule.register supports Redis, password is optional if Redis has no auth.
Final Answer:
The port should be a number, not a string. -> Option A
Quick Check:
Port must be number type [OK]
Hint: Use number type for port, not string, in Redis config [OK]
Common Mistakes:
Passing port as string instead of number
Assuming host option is invalid
Thinking password is always required
5. You want to cache user profile data in Redis with a TTL of 10 minutes in NestJS. Which code snippet correctly sets this cache and retrieves it safely?
hard
A. await cacheManager.set('user_123', profile, 600); const data = cacheManager.get('user_123');
B. await cacheManager.set('user_123', profile, { expire: 600 }); const data = await cacheManager.get('user_123');
C. cacheManager.set('user_123', profile, { ttl: 600 }); const data = await cacheManager.get('user_123');
D. await cacheManager.set('user_123', profile, { ttl: 600 }); const data = await cacheManager.get('user_123');
Solution
Step 1: Use correct TTL option in set()
TTL must be passed as an object property { ttl: 600 } for 10 minutes (600 seconds).
Step 2: Await both set and get calls
Both set and get are async, so await is needed to ensure completion and data retrieval.
Final Answer:
await cacheManager.set('user_123', profile, { ttl: 600 }); const data = await cacheManager.get('user_123'); -> Option D
Quick Check:
TTL as { ttl: 600 } and await both calls [OK]
Hint: Pass TTL as { ttl: seconds } and await async cache calls [OK]
Common Mistakes:
Passing TTL as a number directly instead of in object
Not awaiting async cache get call
Using wrong option name like expire instead of ttl
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.