Spring Redis-@RedisHash动态设置timeToLive

时间:2019-12-04 15:10:03

标签: spring spring-boot redis spring-data-redis

我想在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();


    }

1 个答案:

答案 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
}