Spring provides abstraction for adding caching into application and supporting Redis as one of its providers. This tutorial will give you some highlights when implement in Spring Boot
What you'll need
- JDK 8+ or OpenJDK 8+
- Maven 3+
- Redis 5+ or Docker CE 18+
Dependencies
Beside other Spring Boot starter dependencies, include the Data Redis starter to get the auto-configuration and access to Redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Auto-configure Redis and Caching
Spring Boot provides the following auto-configuration for Redis and caching
RedisCacheManager
is auto-configured whenRedis
is available and configured. You can usespring.redis.*
properties to tune the default settings, for instance
spring.redis.host=hk-redis
spring.redis.timeout=2000
- Cache default settings can be configured by using
spring.cache.redis.*
properties
spring.cache.redis.key-prefix=hellokoding::
spring.cache.redis.time-to-live=100000
spring.redis.timeout
and spring.cache.redis.time-to-live
value are in milliseconds
How caching works
Data in a cache stored in key-value pairs
Caching in Spring uses Java Serialization by default to serialize key and value objects. You can implement
Serializable
to your objects or change the default configuration to use otherRedisSerializer
implementations such asGenericJackson2JsonRedisSerializer
import java.io.Serializable;
public class Product implements Serializable {
}
Apply caching into a method
Add the @Cacheable
annotation to the method you want to cache its result
import org.springframework.cache.annotation.Cacheable;
...
@Cacheable(key = "#id")
public Optional<Product> findById(Long id) {
return productRepository.findById(id);
}
The key
attribute is used to define the cache key in SpEL
expression
If no value is found in the cache, the target method will be invoked and returned value stored in the associated cache
Enable the caching capability
The @EnableCaching
annotation enables Spring caching capability, can be used together with @Configuration
when you need to customize the default configuration
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Internally, @EnableCaching
triggers a post processor to inspect, intercept and handle behaviour of caching annotations such as @Cachable
on public methods
Conclusion
In this tutorial, we walk though some highlights note when implements caching in Spring Boot applications. You can find the implementation source code at https://github.com/hellokoding/hellokoding-courses/tree/master/springboot-examples/springboot-caching-redis