Срок действия ключа джедая
Я пытаюсь понять 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;
}
1 ответ
Решение
Призыв к redisTemplate.expire(KEY, 30, TimeUnit.SECONDS)
происходит в вашем методе init, который будет вызван после внедрения зависимости для инициализации вашего класса. На данный момент ключ Session
не существует, поэтому вызов команды expire не имеет никакого эффекта. См. Описание Redis.io для EXPIRE для полного описания. Вы можете проверить это, зафиксировав возвращаемый результат из команды expire и записав результаты.
Вместо звонка expire
в методе init вы должны вызывать его в методе save, чтобы установить время истечения сеанса при его сохранении.