【问题标题】:Jedis key expiryJedis 密钥到期
【发布时间】:2017-11-11 16:28:21
【问题描述】:

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

有人可以帮忙吗?

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;
}

【问题讨论】:

    标签: java spring spring-boot redis jedis


    【解决方案1】:

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

    不要在init方法中调用expire,你应该在save方法中调用它来设置会话保存时的过期时间。

    【讨论】:

    • 我忘了在你的代码示例中提到你总是使用密钥Session - 所以你所有的保存都会覆盖同一个密钥。这就是你想要的吗?
    • 不,我只是在做 poc,实际上我正在考虑将密钥保存为会话 ID,但现在我必须定义 sessionId 两次。一个用于密钥,一个用于标识符。 hashOperations.put(session.getSessionID(), session.getSessionID(), session); redisTemplate.expire(session.getSessionID(), 30, TimeUnit.MINUTES); 有什么方法可以让我只使用 sessionID 作为键并保存我的对象?
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多