@Override protected RedisSession loadSession(final String clusterId, final RedisSession current) { long now = System.currentTimeMillis(); RedisSession loaded; if (current == null) { LOG.debug( "[RedisSessionManager] loadSession - No session found in cache, loading id={}", clusterId); loaded = loadFromStore(clusterId, current); } else if (current.requestStarted()) { LOG.debug( "[RedisSessionManager] loadSession - Existing session found in cache, loading id={}", clusterId); loaded = loadFromStore(clusterId, current); } else { loaded = current; } if (loaded == null) { LOG.debug( "[RedisSessionManager] loadSession - No session found in Redis for id={}", clusterId); if (current != null) current.invalidate(); } else if (loaded == current) { LOG.debug( "[RedisSessionManager] loadSession - No change found in Redis for session id={}", clusterId); return loaded; } else if (!loaded.lastNode.equals(getSessionIdManager().getWorkerName()) || current == null) { // if the session in the database has not already expired if (loaded.expiryTime * 1000 > now) { // session last used on a different node, or we don't have it in memory loaded.changeLastNode(getSessionIdManager().getWorkerName()); } else { LOG.debug( "[RedisSessionManager] loadSession - Loaded session has expired, id={}", clusterId); loaded = null; } } return loaded; }