Jedis 密钥过期
Jedis key expiry
我试图用 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);
}
}
这是我的配置class
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 方法中,该方法将在发生依赖注入以初始化您的 class 后调用。此时键Session
不存在,调用expire命令无效。有关完整说明,请参阅 EXPIRE 的 Redis.io 说明。您可以通过捕获来自过期命令的 return 结果并记录结果来对此进行测试。
不要在 init 方法中调用 expire
,您应该在 save 方法中调用它以设置会话保存时的过期时间。
我试图用 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);
}
}
这是我的配置class
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 方法中,该方法将在发生依赖注入以初始化您的 class 后调用。此时键Session
不存在,调用expire命令无效。有关完整说明,请参阅 EXPIRE 的 Redis.io 说明。您可以通过捕获来自过期命令的 return 结果并记录结果来对此进行测试。
不要在 init 方法中调用 expire
,您应该在 save 方法中调用它以设置会话保存时的过期时间。