【发布时间】:2019-12-04 15:10:03
【问题描述】:
我想在 RedisHash 中动态设置 timeToLive 值。即,来自属性文件。
我知道@RedisHash是一个接口,所有的字段都是final的,我们不能动态赋值。
@TimeToLive 在字段级别工作正常,但我不想创建一个字段来实现它。
Spring boot 版本:2.2.1.RELEASE
@Data
@RedisHash(value = "user", timeToLive = ? ) // what i need to do here to inject dynamically ?
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User implements Serializable {
@Id
private String id;
private String name;
private String salary;
//@TimeToLive
//private long timeToLive; // this is working. But i don't want it like this.
}
即使尝试使用RedisCacheManager,它也无法正常工作。请建议是否有任何替代方案。
@Configuration
@EnableConfigurationProperties(CacheConfigurationProperties.class)
public class CacheConfig extends CachingConfigurerSupport {
private static RedisCacheConfiguration createCacheConfiguration(long timeoutInSeconds) {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(timeoutInSeconds));
}
@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 (Map.Entry<String, Long> cacheNameAndTimeout : properties.getCacheExpirations().entrySet()) {
cacheConfigurations.put(cacheNameAndTimeout.getKey(), createCacheConfiguration(cacheNameAndTimeout.getValue()));
}
return RedisCacheManager
.builder(redisConnectionFactory)
.cacheDefaults(cacheConfiguration(properties))
.withInitialCacheConfigurations(cacheConfigurations).build();
}
【问题讨论】:
标签: spring spring-boot redis spring-data-redis