首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jedis密钥过期

Jedis密钥过期
EN

Stack Overflow用户
提问于 2017-06-09 23:20:26
回答 1查看 14.1K关注 0票数 9

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

有人能帮帮忙吗?

代码语言:javascript
复制
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);
    }
}

这是我的config类

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-10 04:50:59

redisTemplate.expire(KEY, 30, TimeUnit.SECONDS)的调用发生在您的init方法中,该方法将在发生依赖注入以初始化您的类之后调用。此时,密钥Session不存在,因此调用expire命令没有任何效果。有关完整说明,请参阅EXPIRE的Redis.io说明。您可以通过捕获expire命令的返回结果并记录结果来测试这一点。

不应该在init方法中调用expire,而应该在保存方法中调用它,以便在保存会话时设置会话的过期时间。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44461430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档