java - Jedis key 过期

标签 java spring spring-boot redis jedis

我正在尝试用 spring 来理解 redis/jedis。我被困在某个地方,在一段时间后我无法使我的 key 过期。

有人可以帮忙吗?

public class SessionCacheRepositoryImpl implements SessionCacheRepository {

    private static final String KEY = "Session";

    private RedisTemplate<String, Object> redisTemplate;
    private HashOperations hashOperations;

    @Autowired
    public SessionCacheRepositoryImpl(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @PostConstruct
    private void init() {
        hashOperations = redisTemplate.opsForHash();
        redisTemplate.expire(KEY, 30, TimeUnit.SECONDS);
    }

    public void saveSession(final Session session) {
        hashOperations.put(KEY, session.getSessionID(), session);
    }
}

这是我的配置类

private RedisTemplate<String, Object> template;

@Bean
JedisConnectionFactory jedisConnectionFactory() {
    JedisConnectionFactory jedisConFactory = new JedisConnectionFactory();
    jedisConFactory.setHostName("localhost");
    jedisConFactory.setPort(36919);
    return jedisConFactory;
}

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

最佳答案

redisTemplate.expire(KEY, 30, TimeUnit.SECONDS) 的调用发生在您的 init 方法中,该方法将在发生依赖注入(inject)以初始化您的类后调用。此时,Session 键不存在,所以调用 expire 命令无效。请参阅 Redis.io 对 EXPIRE 的描述一个完整的描述。您可以通过捕获 expire 命令的返回结果并记录结果来对此进行测试。

不要在 init 方法中调用 expire,您应该在 save 方法中调用它以在保存时设置 session 的过期时间。

关于java - Jedis key 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461430/

相关文章:

spring - 是否可以在运行时的Spring Boot中创建REST端点?

Java util 模式实例

java - Android有OnRelease函数吗?

spring - 如何为amazonS3客户端设置区域?

java - JPA,保存关系而不查询实体

java - Spring Boot无法连接MySQL并在Docker/Docker compose中退出

Java/Slf4J : Custom logging for a single class?

java - 覆盖 spring boot 包 jar 中的 messages.properties

java - 实现 java.util.List - 寻找用于验证的 JUnit 测试

java - 具有至少两个字段的简单弹出 java 表单