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

标签 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

如果有机会在属性级别上进行更改,那就太棒了。

最佳答案

您可以通过创建 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/

相关文章:

java - 如何通过 spring-data-jpa 框架进行自定义搜索?

spring - 使用 Jedis 时如何检测 watch/exec 失败?

ios - 无限滚动和重复数据

RedisTemplate执行get vs multiget性能差异

java - NotSslRecordException : not an SSL/TLS record

python - 为什么 RQ 在 logging.config.dictConfg 之后不引发异常?

java - Redis、Mongo 还是 Hazelcast?

docker - 带有自定义文件 redis.conf 的 docker 容器中的 Redis 不起作用

node.js - 全选并截断redis数据库

java - SimpleJdbcRespository 如何以及在哪里实例化了我的存储库接口(interface)?