code: @SuppressWarnings("unchecked")
      public <K, V> CompletableFuture<StatefulRedisClusterConnection<K, V>> connectAsync(RedisCodec<K, V> codec) {
          return transformAsyncConnectionException(connectClusterAsync(codec), getInitialUris());
      }
docs: Connect asynchronously to a Redis Cluster. Use the supplied {@link RedisCodec codec} to encode/decode keys and values.
  Connecting asynchronously requires an initialized topology. Call {@link #getPartitions()} first, otherwise the connect
  will fail with a{@link IllegalStateException}.
  <p>
  What to expect from this connection:
  </p>
  <ul>
  <li>A <i>default</i> connection is created to the node with the lowest latency</li>
  <li>Keyless commands are send to the default connection</li>
  <li>Single-key keyspace commands are routed to the appropriate node</li>
  <li>Multi-key keyspace commands require the same slot-hash and are routed to the appropriate node</li>
  <li>Pub/sub commands are sent to the node that handles the slot derived from the pub/sub channel</li>
  </ul>
  
  @param codec Use this codec to encode/decode keys and values, must not be {@literal null}
  @param <K> Key type
  @param <V> Value type
  @return a {@link CompletableFuture} that is notified with the connection progress.
  @since 5.1