docs: private void saveSession(Session session) throws UnknownSessionException {
  		if (session == null || session.getId() == null) {
  			logger.error("session or session id is null");
  			throw new UnknownSessionException("session or session id is null");
  		}
  		byte[] key;
  		byte[] value;
  		try {
  			key = keySerializer.serialize(getRedisSessionKey(session.getId()));
  			value = valueSerializer.serialize(session);
  		} catch (SerializationException e) {
  			logger.error("serialize session error. session id=" + session.getId());
  			throw new UnknownSessionException(e);
  		}
  		if (expire == DEFAULT_EXPIRE) {
  			this.redisManager.set(key, value, (int) (session.getTimeout() / MILLISECONDS_IN_A_SECOND));
  			return;
  		}
  		if (expire != NO_EXPIRE && expire * MILLISECONDS_IN_A_SECOND < session.getTimeout()) {
  			logger.warn("Redis session expire time: "
  					+ (expire * MILLISECONDS_IN_A_SECOND)
  					+ " is less than Session timeout: "
  					+ session.getTimeout()
  					+ " . It may cause some problems.");
  		}
  		this.redisManager.set(key, value, expire);
  	}