An Interest In:
Web News this Week
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
- April 18, 2024
- April 17, 2024
Add a Redis cache to your NestJS backend
Hi Sparta!
In this article I will share with you how to use Redis as scalable cache system in your NestJS backend.
The full source code and the documentation is available here
This cache system module will be added top of the React/Node/MySQL starter. This starter has already been presented to you in this article.
Redis in 3 words
Redis is an open source in-memory data structure store, that can be used either as a cache, either as a database, or a message broker (like JMS or RabbitMQ). Even in critical applications, Redis is used in production as it provides a high availability via the Redis Sentinels and a automatic partitioning thanks to the Redis Cluster.
Configure your NestJS backend to use Redis
This section is an overhead on top for the official documentation from NestJS, to adapt it to the web starter.
- You should install following packages:
npm install cache-managernpm install cache-manager-redis-store
- You should specify your backend environments variables:
export const environment = { ..., redis: { host: process.env.LOCAL_IP, port: process.env.REDIS_PORT, defaultTtl: 86400 } };
- You should now create a NestJS module
MyRedisCacheModule
with it's serviceMyRedisCacheService
to interact with your cache through thecache-manager
.
set
: allows you to set a cached value.
get
: allows to retrieve the value (will be undefined when TTL expired).
del
: allows you to deleted a stored key.
The controller and the service:
- gets a cached value in Redis
- stores a value in Redis
- deletes a stored key
The controller and service are available here
Setup Redis for dev environment
- The initial starter's
docker-compose
file launches our local databases (with a volume attached), our backend and our frontend. We'll modify it to also launch a redis server locally when starting our web app withdocker-compose up
.
services: db: ... back: ... cache: image: "redis:alpine" ports: - ${REDIS_PORT}:${REDIS_PORT} env_file: ./.env front: ...
(optional) to specify a password for this service you can add command: redis-server --requirepass yourpassword
in the docker-compose.yaml
and add also the password in your backend redisStore
: auth_pass: 'password'
.
- The environments variables in
.env
are loaded by docker when launching your app withdocker-compose up
. You'll to add to this file the redis port you wanna use:
...REDIS_PORT = 6379...
Your redis cache system is now alive locally
You can test the test endpoints created in last section with Postman!
You want to use a cache system in production ? Let's jump to the next section.
Setup Redis for prod environment
From your code point of view, you'll only need to adapt your environment variables to route to a production AWS ElastiCache. For your Redis instance, the non clustered mode should be enough if not dealing with a large volume of datas. The best documentation to be read for this step is the great one provided by AWS for ElastiCache.
Conclusion
I hope this module will help you saving some time while trying to optimize your backend performance with a Redis cache. If you have any question, I'll be present as usual in the comment section!
Links:
- The platform sharing the starter and it's modules: Fast Modular Project
- Module "Scalable caching system with Redis and NestJS" is available here.
Do not hesitate to pin and like if you appreciated the article
Original Link: https://dev.to/fastmodularproject/add-a-redis-cache-to-your-nestjs-backend-aog
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To