Spring boot 如何在使用redis和spring数据缓存时启用分布式/群集缓存
如何在将Redis与Spring boot 如何在使用redis和spring数据缓存时启用分布式/群集缓存,spring-boot,redis,spring-data,spring-data-redis,spring-cache,Spring Boot,Redis,Spring Data,Spring Data Redis,Spring Cache,如何在将Redis与spring boot缓存一起使用时启用分布式/群集缓存 特别是当通过spring boot starter数据使用Redis时,在spring boot应用程序中启用缓存非常简单。你只需要遵循三个步骤 定义缓存配置 将EnableCaching添加到任何配置类 提供CacheManager bean 对于Redis,我们提供了可配置和创建的RedisCacheManager 缓存配置 @Configuration @Getter @Setter @Configurati
spring boot
缓存一起使用时启用分布式/群集缓存
特别是当通过spring boot starter数据使用Redis时,在spring boot应用程序中启用缓存非常简单。你只需要遵循三个步骤
- 定义缓存配置
- 将EnableCaching添加到任何配置类
- 提供CacheManager bean
@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;
}
创建配置后,可以通过生成器为RedisCacheManager创建缓存配置
@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();
}
}
@配置
@启用缓存
公共类CacheConfig{
私有静态RedisCacheConfiguration createCacheConfiguration(长超时秒){
返回RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(持续时间秒(超时秒));
}
@豆子
公共LettuceConnectionFactory重新连接工厂(CacheConfigurationProperties){
RedisStandaloneConfiguration RedisStandaloneConfiguration=新的RedisStandaloneConfiguration();
setHostName(properties.getRedisHost());
设置端口(properties.getRedisPort());
返回新的LettuceConnectionFactory(重新标准配置);
}
@豆子
公共重新缓存配置缓存配置(缓存配置属性属性){
返回createCacheConfiguration(properties.getTimeoutSeconds());
}
@豆子
公共缓存管理器缓存管理器(
RedisConnectionFactory RedisConnectionFactory、CacheConfigurationProperties(属性){
Map cacheConfigurations=newhashmap();
对于(条目cacheNameAndTimeout:properties.getCacheTtls().entrySet()){
cacheConfigurations.put(
cacheNameAndTimeout.getKey(),createCacheConfiguration(cacheNameAndTimeout.getValue());
}
返回RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(缓存配置(属性))
.withInitialCacheConfigurations(缓存配置)
.build();
}
}
如果您使用的是Redis cluster,请按照此更新缓存属性。在这种情况下,如果您希望缓存特定的bean而不是使这些方法私有,那么一些bean将成为主bean
@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();
}
}