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(…)
会很合适。
我需要为我拥有的每个实体设置全局 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(…)
会很合适。