redis/jedis · error · InvalidURIException

Cannot open Redis connection due invalid URI.

Error message

Cannot open Redis connection due invalid URI. %s

What it means

Thrown in the JedisFactory URI constructor when the supplied URI cannot be converted to a valid host/port Redis connection — the URI is malformed, uses an unsupported scheme, or lacks a resolvable host. It is a fail-fast configuration guard before the pool creates any connections.

Solutions

  1. Use a well-formed URI such as redis://[:password@]host:port[/database] or rediss:// for TLS
  2. Validate the URI string before passing it (URI.create / new URI) to catch syntax errors
  3. Pass host/port parameters explicitly instead of a URI if the endpoint is assembled dynamically
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/main/java/redis/clients/jedis/JedisFactory.java:161 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of redis/jedis@6dac31d4c2 (2026-09-08). Data as JSON: /api/errors/19111ec22d38de74. Report an issue: GitHub.

Appendix: source

Thrown at src/main/java/redis/clients/jedis/JedisFactory.java:161

  }

  protected JedisFactory(final URI uri, final int connectionTimeout, final int soTimeout,
      final String clientName) {
    this(uri, connectionTimeout, soTimeout, clientName, null, null, null);
  }

  protected JedisFactory(final URI uri, final int connectionTimeout, final int soTimeout,
      final String clientName, final SSLSocketFactory sslSocketFactory,
      final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) {
    this(uri, connectionTimeout, soTimeout, 0, clientName, sslSocketFactory, sslParameters,
        hostnameVerifier);
  }

  protected JedisFactory(final URI uri, final int connectionTimeout, final int soTimeout,
      final int infiniteSoTimeout, final String clientName, final SSLSocketFactory sslSocketFactory,
      final SSLParameters sslParameters, final HostnameVerifier hostnameVerifier) {
    if (!JedisURIHelper.isValid(uri)) {
      throw new InvalidURIException(
          String.format("Cannot open Redis connection due invalid URI. %s", uri.toString()));
    }
    this.clientConfig = legacyConfigBuilderWithoutProtocolNegotiation().connectionTimeoutMillis(connectionTimeout)
        .socketTimeoutMillis(soTimeout).blockingSocketTimeoutMillis(infiniteSoTimeout)
        .user(JedisURIHelper.getUser(uri)).password(JedisURIHelper.getPassword(uri))
        .database(JedisURIHelper.getDBIndex(uri)).clientName(clientName)
        .protocol(JedisURIHelper.getRedisProtocol(uri)).ssl(JedisURIHelper.isRedisSSLScheme(uri))
        .sslSocketFactory(sslSocketFactory).sslParameters(sslParameters)
        .hostnameVerifier(hostnameVerifier).build();
    this.jedisSocketFactory = new DefaultJedisSocketFactory(
        new HostAndPort(uri.getHost(), uri.getPort()), this.clientConfig);
  }

  void setHostAndPort(final HostAndPort hostAndPort) {
    if (!(jedisSocketFactory instanceof DefaultJedisSocketFactory)) {
      throw new IllegalStateException("setHostAndPort method has limited capability.");
    }
    ((DefaultJedisSocketFactory) jedisSocketFactory).updateHostAndPort(hostAndPort);

View on GitHub (pinned to 6dac31d4c2)