For a high-read Spring Boot application, in-memory or distributed caching reduces database load by serving frequently accessed data straight from a fast cache instead of re-querying the database on every request.
Key Points: • Ehcache works well for a single-instance application, keeping cached data local to that JVM. • Redis is a distributed, in-memory data store better suited to multi-instance deployments, since all instances share the same cache. • The @Cacheable annotation caches a method's return value keyed by its arguments, with @CacheEvict and @CachePut managing invalidation and updates. • Redis additionally supports expiration policies and can serve as a shared cache for horizontally scaled applications behind a load balancer. • Choosing between local and distributed caching depends on whether cache consistency across instances matters for the specific data being cached.
Example: A product catalog endpoint hit thousands of times per minute is annotated with @Cacheable("products"), backed by Redis, so only the first request per product actually queries the database while subsequent requests are served from cache in single-digit milliseconds.
Code Example:
@Cacheable(value = "products", key = "#id")
public Product getProduct(Long id) {
return productRepository.findById(id).orElseThrow();
}Interview Tip: A concise interview answer is:
"For a high-read workload I'd reach for Redis-backed caching with @Cacheable on the frequently hit read paths, since Redis works consistently across multiple application instances, unlike a purely local cache like Ehcache. That cuts repeated database load significantly and keeps read latency low even as traffic scales."