Caching with Redis

Caching reduces latency and database load by storing frequently accessed data in a fast key-value store. Redis is commonly used for application caching, distributed locks, counters, sessions, rate limiting, and ephemeral data.

A cache strategy must define expiration, invalidation, consistency expectations, and behavior when the cache is unavailable.

Cache-Aside Pattern
const cached = await redis.get(`user:${id}`);

if (cached) {
  return JSON.parse(cached);
}

const user = await User.findById(id).lean();
await redis.set(`user:${id}`, JSON.stringify(user), { EX: 300 });

return user;
💡 The application first checks the cache and queries the database only when the value is missing.
Key Takeaways
  • Caching is a trade-off between performance and consistency.
  • Every cache should have an invalidation or expiration strategy.
  • The application should define what happens when the cache is unavailable.
Knowledge Check

What is the cache-aside pattern?