code: @Override
  	public void start() throws IOException, InterruptedException {
  		if (started) {
  			return;
  		}
  		executionResultHandler = execution.start(lifecyclePolicy.getProcessDestroyer());
  		Socket socket = tryToConnect();
  		started = true;
  		try {
  			waitForServerReadiness(socket);
  		} finally {
  			socket.close();
  		}
  	}
docs: {@inheritDoc}
  
  There are three steps to server startup:
  <ol>
  <li>Execute the redis-server process</li>
  <li>Connect to the server. Makes multiple connection attempts up to the maximum specified by
  {@link ConnectionProperties#maximumConnectionAttempts}, waiting
  100 milliseconds between each attempt.</li>
  <li>Wait for the server to become ready. Sends multiple PING commands up to the maximum specified by
  {@link ConnectionProperties#maximumReadinessAttempts}</li>, waiting
  1000 milliseconds between each attempt.
  </ol>
  
  @throws ConnectException
  if the server process was started but no connection to it could be made
  @throws ServerNotReadyException
  if the server process was started but did not respond positively to redis PING commands
  @throws IOException
  if the server could not be started because the process could not be started
  @throws InterruptedException
  if interrupted while waiting to start