java - Redis 仍然返回 null 条目,即使它们已过期

标签 java spring spring-boot redis spring-data-redis

我将 Spring Repositories 与 Redis 一起使用,并希望将有关用户的数据存储 10 秒,然后从 Redis 中使它们过期(并删除)。 我知道过期和删除是不同的,但是有没有一种简单的方法可以删除它们,就像我自动使它们过期一样。

我有以下实体

@RedisHash(value = "User", timeToLive = 10)
public class User {
    @Id
    private String id;
    @Indexed
    @ApiModelProperty(notes = "First name of the user")
    private String firstName;
    @ApiModelProperty(notes = "Last name of the user")
    private String lastName;

    ...
    ...
}

存储库

@Repository
public interface UserRepository extends CrudRepository<User, String> {
}

Redis 的配置

@Configuration
public class RedisConfig {

    @Value("${redis.hostname}")
    private String redisHostname;
    @Value("${redis.port}")
    private int redisPort;

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(redisHostname, redisPort);
        return new JedisConnectionFactory(redisStandaloneConfiguration);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory());
        return template;
    }
}

当我使用 findAll 方法从存储库中获取所有实体(如果它们已过期)时,我会得到一堆空值,并且我可以看到它们在带有 redis 客户端的 redis 中。我担心这会用大量过期数据填充数据库。有没有办法删除过期的实体。

最佳答案

简短的回答是:

添加以下注释:

@EnableRedisRepositories(enableKeyspaceEvents = EnableKeyspaceEvents.ON_STARTUP)

在你的主类(SpringBootApplication)之上

对象现在将从 redis 存储中删除:)

关于java - Redis 仍然返回 null 条目,即使它们已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56181590/

相关文章:

java - 如何最大化 Selenium 屏

java - 如何将 java.lang.Long 添加到用于测试的 GroovyScript

java - 如何使用AOP计算 Controller 类中调用的所有内部服务的响应时间

mysql - 配置jhipster使用mysql而不是H2数据库

java - @RequestMapping(value = "v1/firewall/policy/{zoneId:.*\\D+.*}") 是做什么的?

javax.xml.crypto.dsig.XMLSignatureException : the keyselector did not find a validation key

java - Java Socket 是否缓存 DNS?

java - Android:如何将 'insert'一个布局转换成另一个布局?

spring - 如何注入(inject)@products方法

java - SimpleMappingExceptionResolver 中的 Spring doResolveException 未被调用