Kích hoạt bộ nhớ đệm trong ứng dụng khởi động mùa xuân rất đơn giản. Bạn chỉ cần làm theo ba bước.
- Xác định cấu hình bộ nhớ cache
- Thêm EnableCaching vào bất kỳ lớp cấu hình nào
- Cung cấp một bean CacheManager
Đối với Redis, chúng tôi có RedisCacheManager có thể được định cấu hình và tạo.
Cấu hình bộ nhớ đệm
@Configuration
@Getter
@Setter
@ConfigurationProperties(prefix = "cache")
public class CacheConfigurationProperties {
// Redis host name
private String redisHost;
// Redis port
private int redisPort;
// Default TTL
private long timeoutSeconds;
// TTL per cache, add enties for each cache
private Map<String, Long> cacheTtls;
}
Đặt giá trị của chúng thông qua thuộc tính hoặc tệp yaml như
cache.redisHost=localhost
cache.redisPort=6379
cache.timeoutSeconds=1000
cache.cacheTtls.cach1=100
cache.cacheTtls.cach2=200
Khi bạn đã tạo cấu hình, bạn có thể tạo cấu hình bộ đệm cho RedisCacheManger bằng trình tạo.
@Configuration
@EnableCaching
public class CacheConfig {
private static RedisCacheConfiguration createCacheConfiguration(long timeoutInSeconds) {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(timeoutInSeconds));
}
@Bean
public LettuceConnectionFactory redisConnectionFactory(CacheConfigurationProperties properties) {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(properties.getRedisHost());
redisStandaloneConfiguration.setPort(properties.getRedisPort());
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisCacheConfiguration cacheConfiguration(CacheConfigurationProperties properties) {
return createCacheConfiguration(properties.getTimeoutSeconds());
}
@Bean
public CacheManager cacheManager(
RedisConnectionFactory redisConnectionFactory, CacheConfigurationProperties properties) {
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
for (Entry<String, Long> cacheNameAndTimeout : properties.getCacheTtls().entrySet()) {
cacheConfigurations.put(
cacheNameAndTimeout.getKey(), createCacheConfiguration(cacheNameAndTimeout.getValue()));
}
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(cacheConfiguration(properties))
.withInitialCacheConfigurations(cacheConfigurations)
.build();
}
}
Nếu bạn đang sử dụng cụm Redis, hãy cập nhật các thuộc tính bộ đệm theo điều đó. Trong điều này, một số bean sẽ trở thành chính nếu bạn muốn bean cụ thể vào bộ nhớ cache hơn là đặt các phương thức này ở chế độ riêng tư.