apache/druid · error · IllegalArgumentException

Invalid redis configuration. no redis server or cluster…

Error message

Invalid redis configuration. no redis server or cluster configured.

What it means

RedisCacheFactory.create fell through both configuration branches: no Redis cluster was configured and the standalone host is blank. Without either a cluster node list or a host, no cache client can be constructed, so the factory throws an IAE telling the operator to configure druid.cache.host or druid.cache.cluster.nodes.

Solutions

  1. Set druid.cache.host (and port) for standalone Redis, or druid.cache.cluster.nodes for Redis Cluster.
  2. Verify the cache type/extension config actually populated RedisCacheConfig (check property names and config loading).
  3. Fail fast at startup with this IAE is intended — fix configuration and restart.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at extensions-contrib/redis-cache/src/main/java/org/apache/druid/client/cache/RedisCacheFactory.java:85 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/98a5f4f1d1b70acf. Report an issue: GitHub.

Appendix: source

Thrown at extensions-contrib/redis-cache/src/main/java/org/apache/druid/client/cache/RedisCacheFactory.java:85

      ConnectionPoolConfig poolConfig = new ConnectionPoolConfig();
      poolConfig.setMaxTotal(config.getMaxTotalConnections());
      poolConfig.setMaxIdle(config.getMaxIdleConnections());
      poolConfig.setMinIdle(config.getMinIdleConnections());

      JedisCluster cluster = new JedisCluster(
          nodes,
          buildClientConfig(config, 0),
          config.getCluster().getMaxRedirection(),
          poolConfig
      );

      return new RedisClusterCache(cluster, config);

    } else {

      if (StringUtils.isBlank(config.getHost())) {
        throw new IAE("Invalid redis configuration. no redis server or cluster configured.");
      }

      JedisPoolConfig poolConfig = new JedisPoolConfig();
      poolConfig.setMaxTotal(config.getMaxTotalConnections());
      poolConfig.setMaxIdle(config.getMaxIdleConnections());
      poolConfig.setMinIdle(config.getMinIdleConnections());

      return new RedisStandaloneCache(
          new JedisPool(
              poolConfig,
              new HostAndPort(config.getHost(), config.getPort()),
              buildClientConfig(config, config.getDatabase())
          ),
          config
      );
    }
  }

View on GitHub (pinned to 9b90983fd2)