gpt4 book ai didi

redis - 所有实体的 Spring Data Redis 全局 TTL

转载 作者:IT王子 更新时间:2023-10-29 06:03:52 26 4
gpt4 key购买 nike

我需要为我拥有的每个实体设置全局 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()首先,但由于您想将该设置应用于所有类,因此就地创建 KeyspaceSettings更有意义。

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

关于redis - 所有实体的 Spring Data Redis 全局 TTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42577222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com