弹性缓存 – Redis – 写入约 30-40K 个键后无法连接 – 连接池问题

huangapple 未分类评论64阅读模式
标题翻译

Elatsic cache - redis - Not able to connect after writing ~30-40 K keys- connection pool issue

问题

我正在使用具有4个分片和每个分片2个副本节点的Elastic Cache Redis,总共有12个节点。
我正在使用带有lettuce的Spring Data Redis。
以下是我用于集群连接的配置 -

public LettuceConnectionFactory redisConnectionFactory() {
    List<String> nodes = new ArrayList<>();

    nodes.add("shard1***");
    nodes.add("shard2***");
    nodes.add("shard3***");
    nodes.add("shard4***");
    
    RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration(nodes);
    return new LettuceConnectionFactory(clusterConfiguration);
}

我正在使用管道写入数据,该管道在一个管道中执行5个写入命令。对于这个操作,吞吐量非常高,约为每秒300K,因此我遇到了以下错误。是否有任何方法可以优化lettuce连接池以解决此问题。任何指示都将很有帮助。

at io.lettuce.core.LettuceFutures.awaitAll(LettuceFutures.java:88)
Caused by: io.lettuce.core.RedisException: io.lettuce.core.RedisConnectionException: 无法连接到172.26.25.141:6379

	at org.springframework.data.redis.connection.lettuce.LettuceConnection.closePipeline(LettuceConnection.java:542)
	... 35 more
Caused by: io.lettuce.core.RedisConnectionException: 无法连接到172.26.25.141:6379
Caused by: io.lettuce.core.RedisConnectionException: 无法连接到172.26.25.141:6379

	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78)
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56)
	at io.lettuce.core.cluster.PooledClusterConnectionProvider.lambda$getConnectionAsync$6(PooledClusterConnectionProvider.java:384)
	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
	at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
	at io.lettuce.core.AbstractRedisClient.lambda$initializeChannelAsync0$4(AbstractRedisClient.java:329)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551)
英文翻译

I am using Elastic cache redis with 4 shards and 2 replica nodes for each shard, in total 12 nodes.
I am using spring data redis with lettuce.
Below is my configuration for cluster connection -

public LettuceConnectionFactory redisConnectionFactory() {

    List&lt;String&gt;  nodes = new ArrayList&lt;&gt;();

    nodes.add(&quot;shard1***&quot;);
    nodes.add(&quot;shard2***&quot;);
    nodes.add(&quot;shard3***&quot;);
    nodes.add(&quot;shard4***&quot;);
    RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration(nodes);
    return new LettuceConnectionFactory(clusterConfiguration);

}

I am writing data in a pipeline, which execute 5 write commands in a pipeline. Throughput is very high for this ~300K/per sec and due to this I am getting below error. Is there any way I can optimize lettuce pool to resolve this issue. Any pointer will be helpful.

at io.lettuce.core.LettuceFutures.awaitAll(LettuceFutures.java:88)
Caused by: io.lettuce.core.RedisException: io.lettuce.core.RedisConnectionException: Unable to connect to 172.26.25.141:6379

at org.springframework.data.redis.connection.lettuce.LettuceConnection.closePipeline(LettuceConnection.java:542)
... 35 more

Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to 172.26.25.141:6379
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to 172.26.25.141:6379

at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78)
at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56)
at io.lettuce.core.cluster.PooledClusterConnectionProvider.lambda$getConnectionAsync$6(PooledClusterConnectionProvider.java:384)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
at io.lettuce.core.AbstractRedisClient.lambda$initializeChannelAsync0$4(AbstractRedisClient.java:329)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551)

huangapple
  • 本文由 发表于 2020年3月4日 02:53:01
  • 转载请务必保留本文链接:https://java.coder-hub.com/60513811.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定