Ad Code

Responsive Advertisement

Ticker

6/recent/ticker-posts

Cache Management in Spring Framework

Caching is a powerful technique used to improve application performance by storing the results of expensive operations. Spring provides a simple and flexible caching abstraction through annotations, allowing developers to easily integrate caching into their applications with minimal configuration.

Enabling Caching in Spring

To enable caching in a Spring application, add the @EnableCaching annotation to a configuration class:


import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableCaching
public class CacheConfig {
    // Additional configuration if needed
}
  

Using Cache Annotations

Spring provides several annotations for cache management:

  • @Cacheable – Caches the result of a method execution.
  • @CachePut – Updates the cache without skipping the method execution.
  • @CacheEvict – Removes one or more entries from the cache.

Example: Using @Cacheable


import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Cacheable("products")
    public Product getProductById(String id) {
        // Simulate slow service call
        simulateSlowService();
        return new Product(id, "Sample Product");
    }

    private void simulateSlowService() {
        try {
            Thread.sleep(3000); // Simulate delay
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }
}
  

The first time getProductById() is called with a specific ID, the result is cached. Subsequent calls with the same ID return the cached value instantly.

Evicting Cache: @CacheEvict


@CacheEvict(value = "products", allEntries = true)
public void clearProductCache() {
    // This method will clear all entries from the "products" cache
}
  

Configuring Cache Provider

By default, Spring uses a simple in-memory cache. You can also integrate popular caching solutions like:

  • EhCache -> Local Type(Lightweight, fast, often embedded in single-node applications)
  • Caffeine -> Local Type (Super-fast local cache for high-performance single-server apps)
  • Redis -> server/Remote (Best for shared cache across microservices or distributed systems)
  • Hazelcast -> Server + Local (Great for clustering, distributed caching, and even in-memory databases)

Example: Using Caffeine Cache in Spring Boot


# application.properties
spring.cache.type=caffeine
spring.cache.caffeine.spec=maximumSize=100,expireAfterWrite=10m
  

Conclusion

Spring's caching abstraction simplifies the integration of caching into your application. By leveraging annotations and configurable cache providers, you can significantly improve the performance and scalability of your application.

Post a Comment

0 Comments