Spring 所有实体的数据 Redis 全局 TTL

Spring Data Redis global TTL for all entities

我需要为我拥有的每个实体设置全局 TTL,它应该可以在一个地方进行配置。 有机会通过@RedisHash 注释来做到这一点:

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

或者我可以有一个字段

 public class Person{
      @TimeToLeave
      Long ttl;
 }

但在这种情况下,我不能在一个地方更改它,而且不太舒服 维护它。 我在 applicaiton.properties 中有一个 属性:

app.redis.ttl=100

有机会在 属性 水平上改变它会很棒。

您可以通过创建 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(),但由于您想将该设置应用到所有 类,因此 [=15] 的就地创建=] 更有意义。

您可能还想缓存 KeyspaceSettings 而不是到处创建实例,所以 Java 8 的 Map.computeIfAbsent(…) 会很合适。