我需要为我拥有的每个实体设置全局TTL,它应该可以在一个地方配置。 有机会通过@RedisHash注释执行此操作:
@RedisHash(value = "persons",timeToLive = 100)
public class Person{
...
}
或者我可以有一个字段
public class Person{
@TimeToLeave
Long ttl;
}
但是在这种情况下我不能在一个地方改变它并且它不太舒服 保持它。 我在applicaiton.properties中有一个属性:
app.redis.ttl=100
如果有机会在物业级别更改它将会很棒。
答案 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(…)
非常合适。