我想在RedisHash中动态设置timeToLive
的值。即来自属性文件。
我知道@RedisHash
是一个接口,并且所有字段都是最终的,我们无法动态分配值。
@TimeToLive
在字段级别上工作正常,但是我不想创建一个字段来实现它。
春季启动版本:2.2.1。发布
@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();
}
答案 0 :(得分:1)
您可以定义以下类并在时间字段中定义时间
public class Example implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@Indexed
private String name;
private String data;
@TimeToLive
private long time; --> set time to live
}