我们正在使用Redis企业版
5个碎片:主机:6379-6383
端点:redis-endpoint.example.com 6378
使用Jedis 4.3.x,当我使用JedisPooled时,它可以正常工作
GenericObjectPoolConfig<Connection> genericPoolConfig = new GenericObjectPoolConfig<>();
genericPoolConfig.setMaxIdle(4);
genericPoolConfig.setMaxTotal(5);
genericPoolConfig.setMinIdle(2);
JedisClientConfig clientConfig = DefaultJedisClientConfig.builder()
.sslSocketFactory(sslContext.getSocketFactory()) // key/trust stores here
.ssl(true)
.user("user_here")
.password(redisPassword)
.hostnameVerifier(hostnameVerifier)
.build();
JedisPooled jedis = new JedisPooled(genericPoolConfig, new HostAndPort("redis-endpoint.example.com", 6378), clientConfig);
jedis.set("key_1", "value_1"); // this cmd works
但是当我尝试使用JedisCluster时,它抛出Exception
Set<HostAndPort> jedisClusterNodes = new HashSet<>();
jedisClusterNodes.add(new HostAndPort("redis-endpoint.example.com", 6378));
JedisCluster cluster = new JedisCluster(jedisClusterNodes, clientConfig, 3, genericPoolConfig); // <== ERROR here
cluster.set("key_2", "value_2");
我有错误:
Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: ERR command is not allowed
at redis.clients.jedis.Protocol.processError(Protocol.java:96)
at redis.clients.jedis.Protocol.process(Protocol.java:137)
at redis.clients.jedis.Protocol.read(Protocol.java:192)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:316)
at redis.clients.jedis.Connection.getUnflushedObjectMultiBulkReply(Connection.java:282)
at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:287)
at redis.clients.jedis.JedisClusterInfoCache.executeClusterSlots(JedisClusterInfoCache.java:320)
at redis.clients.jedis.JedisClusterInfoCache.discoverClusterNodesAndSlots(JedisClusterInfoCache.java:60)
at redis.clients.jedis.providers.ClusterConnectionProvider.initializeSlotsCache(ClusterConnectionProvider.java:42)
at redis.clients.jedis.providers.ClusterConnectionProvider.<init>(ClusterConnectionProvider.java:33)
at redis.clients.jedis.UnifiedJedis.<init>(UnifiedJedis.java:122)
at redis.clients.jedis.JedisCluster.<init>(JedisCluster.java:173)
at redis.clients.jedis.JedisCluster.<init>(JedisCluster.java:167)
问题:
-
我应该把所有5个碎片都放在Set jedisClusterNodes中,还是只需要放集群端点。
-
我在使用时做错了什么
new JedisCluster(jedisClusterNodes, clientConfig, 3, genericPoolConfig);
?
-
JedisPooled在集群模式下工作得好吗?