code: public <T> T execute(RedisClusterCallback<T> action) {
          GatewayException exception = null;
          for (int i = 0; i <= this.maxRetry; i++) {
              try {
                  return executeCallback(action, i);
              } catch (GatewayException e) {
                  if (!e.isRetryable()) {
                      throw e;
                  } else {
                      exception = e;
                      if (i < this.maxRetry) {
                          log.warn(
                                  "[GatewayClient] Failed to action. auto retrying ... " + (i + 1) + "/" + this.maxRetry, e);
                      }
                  }
              }
          }
  
          throw exception;
      }
docs: execute to action(redis in command)
  
  @param <T>    the generic type
  @param action {@link RedisClusterCallback}
  @return object returned by the action