❓ The Exception
org.springframework.data.redis.ClusterRedirectException: Redirect: slot 14865 to 10.170.15.31
This error occurs when you're using a Redis Cluster (e.g. AWS ElastiCache in cluster mode), and the client tries to access a Redis slot that is managed by a different node.
🔍 What Does It Mean?
- Redis Cluster splits the keyspace into 16,384 hash slots.
- Each Redis node handles a subset of these slots.
- If your client accesses a key from the wrong node, Redis returns a
MOVEDredirect. - Spring Data Redis receives this and throws a
ClusterRedirectException.
📦 Example Scenario
- You try to access a key that hashes to slot
14865. - Your client contacts a node that does not own that slot.
- Redis replies with:
MOVED 14865 10.170.15.31:6379
🚨 Why This Happens
- Your client may not be fully cluster-aware.
- You’re using
JedisorSpring Rediswithout proper cluster configuration. - Only a single node was configured, so slot ownership is unknown to the client.
✅ Proper Configuration (Lettuce)
Use LettuceConnectionFactory with a RedisClusterConfiguration:
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration();
clusterConfig.clusterNode("10.170.15.31", 6379);
clusterConfig.clusterNode("10.170.15.32", 6379);
return new LettuceConnectionFactory(clusterConfig);
}
✅ For Jedis Users
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
RedisClusterConfiguration clusterConfig = new RedisClusterConfiguration();
clusterConfig.clusterNode("10.170.15.31", 6379);
clusterConfig.clusterNode("10.170.15.32", 6379);
return new JedisConnectionFactory(clusterConfig);
}
spring.redis.host and spring.redis.port for Redis Cluster.
This connects as a standalone instance and does not support slot redirection.
🧠 Best Practices
- Use cluster-aware clients like
LettuceorJedisCluster. - Configure multiple cluster nodes for failover and topology discovery.
- Use
spring.redis.cluster.nodesinstead of host/port inapplication.properties.
spring.redis.cluster.nodes=10.170.15.31:6379,10.170.15.32:6379
spring.redis.timeout=60000