所有实体的Spring Data Redis全局TTL

时间:2017-03-03 11:05:08

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

我需要为我拥有的每个实体设置全局TTL,它应该可以在一个地方配置。 有机会通过@RedisHash注释执行此操作:

@RedisHash(value = "persons",timeToLive = 100)
public class Person{
  ...
}

或者我可以有一个字段

 public class Person{
      @TimeToLeave
      Long ttl;
 }

但是在这种情况下我不能在一个地方改变它并且它不太舒服 保持它。 我在applicaiton.properties中有一个属性:

app.redis.ttl=100

如果有机会在物业级别更改它将会很棒。

1 个答案:

答案 0 :(得分:4)

您可以通过创建KeyspaceConfiguration的子类并配置@EnableRedisRepositories来配置设置。全局TTL没有基于属性的配置。

@EnableRedisRepositories(keyspaceConfiguration = MyKeyspaceConfiguration.class)
public class MyConfig {

}

public class MyKeyspaceConfiguration extends KeyspaceConfiguration {


    @Override
    public boolean hasSettingsFor(Class<?> type) {
        return true;
    }

    @Override
    public KeyspaceSettings getKeyspaceSettings(Class<?> type) {

        KeyspaceSettings keyspaceSettings = new KeyspaceSettings(type, "my-keyspace");
        keyspaceSettings.setTimeToLive(3600L);

        return keyspaceSettings;
    }
}

KeyspaceConfiguration派生的目的是首先提供Iterable<KeyspaceSettings> initialConfiguration(),但由于您希望将该设置应用于所有类,因此KeyspaceSettings的就地创建更有意义。

您也可能希望将KeyspaceSettings缓存到不创建实例,因此Java 8的Map.computeIfAbsent(…)非常合适。