[英]How to push complex java objects to Redis using lettuce 4.2 Cluster client
[英]Azure Redis SSL Cluster + Lettuce Java (EDIT: lettuce version < 4.2)
我需要使用Azure Redis群集,密碼,SSL和流水線支持。
到目前為止,我一直在使用Jedis,但它不支持cluster + ssl + password + pipelining組合。
我嘗試了生菜( https://github.com/mp911de/lettuce/releases/tag/4.1.2.Final ),目前遇到了我自己無法解決的連接問題。
連接到Azure Redis群集(2 * P4)無需使用SSL,但不能使用。 另外,我可以使用SSL但不支持群集來連接到單個節點。 問題是當組合cluster + ssl時,auth調用超時(命令通過網絡發送但超時)。
沒有SSL工作代碼的集群如下所示:
RedisURI redisURI = RedisURI.Builder.redis(host, 6379)
.withPassword(password)
.build();
RedisClusterClient client = RedisClusterClient.create(redisURI);
RedisAdvancedClusterCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
輸出為1
啟用SSL:
RedisURI redisURI = RedisURI.Builder.redis(host, 6380)
.withPassword(password)
.withSsl(true)
.build();
RedisClusterClient client = RedisClusterClient.create(redisURI);
RedisAdvancedClusterCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
它在1分鍾內掛起,log4j日志如下所示:
2016-05-26 14:25:17,110 | TRACE | lettuce-nioEventLoop-3-1 | CommandEncoder | [/{CLIENT} -> {HOST}/{IP}:6380] Sent: *2
$4
AUTH
$44
{PASSWORD}
2016-05-26 14:26:17,134 | WARN | main | ClusterTopologyRefresh | Cannot connect to RedisURI [host='***', port=6380]
com.lambdaworks.redis.RedisCommandTimeoutException: Command timed out
at com.lambdaworks.redis.LettuceFutures.await(LettuceFutures.java:95)
at com.lambdaworks.redis.LettuceFutures.awaitOrCancel(LettuceFutures.java:74)
at com.lambdaworks.redis.AbstractRedisAsyncCommands.auth(AbstractRedisAsyncCommands.java:64)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectToNode(RedisClusterClient.java:342)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectToNode(RedisClusterClient.java:301)
at com.lambdaworks.redis.cluster.ClusterTopologyRefresh.getConnections(ClusterTopologyRefresh.java:240)
at com.lambdaworks.redis.cluster.ClusterTopologyRefresh.loadViews(ClusterTopologyRefresh.java:132)
at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:468)
at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:445)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterImpl(RedisClusterClient.java:359)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:244)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:231)
at com.ubikod.ermin.reach.tools.Test.main(Test.java:20)
Exception in thread "main" com.lambdaworks.redis.RedisException: Cannot retrieve initial cluster partitions from initial URIs [RedisURI [host='***', port=6380]]
at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:471)
at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:445)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterImpl(RedisClusterClient.java:359)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:244)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:231)
at com.ubikod.ermin.reach.tools.Test.main(Test.java:20)
保持SSL並禁用集群的工作原理:
RedisURI redisURI = RedisURI.Builder.redis(host, 6380)
.withPassword(password)
.withSsl(true)
.build();
RedisClient client = RedisClient.create(redisURI);
RedisCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
因此,這不僅是SSL問題,還包括SSL +群集組合問題。 我嘗試使用withStartTls
,禁用對等驗證,增加超時時間,這些都沒有運氣。
知道是庫錯誤還是Azure Redis錯誤?
我檢查了lettuce
的Wiki 頁面 ,發現該問題不是由庫錯誤或Azure Redis錯誤引起的,不幸的是,僅lettuce
不支持帶SSL的Redis群集,請參閱“ Connecting to Redis using String RedisURI
”小節中的以下內容Connecting to Redis using String RedisURI
Wiki頁面的Connecting to Redis using String RedisURI
。
lettuce僅在常規Redis連接上支持SSL。 不支持使用Redis Sentinel或Redis Cluster進行主解析,因為這兩種策略都向本機端口提供Redis地址。 Redis Sentinel和Redis Cluster無法提供SSL端口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.