我正在通过
Google cloud managed redis cluster(v5)
使用
redisson(3.12.5)
以下是我在yaml文件中的
SingleServer
配置
singleServerConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
password: null
subscriptionsPerConnection: 5
clientName: null
address: "redis://127.0.0.1:6379"
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 40
connectionPoolSize: 250
database: 0
dnsMonitoringInterval: 5000
threads: 0
nettyThreads: 0
codec: !<org.redisson.codec.JsonJacksonCodec> {}
当我增加应用程序的负载时,出现以下异常
org.redisson.client.RedisTimeoutException: Unable to acquire connection! Increase connection pool size and/or retryInterval settings Node source: NodeSource
org.redisson.client.RedisTimeoutException: Command still hasn't been written into connection! Increase nettyThreads and/or retryInterval settings. Payload size in bytes: 34. Node source: NodeSource
看来redis集群没有问题,我想我需要在客户端redis连接池confs(上面提到的)中进行调整才能使其工作。
请建议我需要在我的配置中进行更改
我也很好奇在进行 get/set 调用后是否应该关闭
Redis
连接。我尝试找到这个,但没有发现关于如何关闭Redis
连接的结论
我想问的最后一件事是,是否有任何机制可以获取
Redis
中的连接池统计信息(活动连接、空闲连接等)编辑1:
我尝试过在 3 个不同的迭代中更改以下值的值
迭代 1:
Redisson
idleConnectionTimeout: 30000
connectTimeout: 30000
timeout: 30000
迭代 3:
nettyThreads: 0
我已经尝试过这些方法,但没有任何效果对我有用
如有任何帮助,我们将不胜感激。
提前致谢
您可能需要分析流量并确定两件事
仍然有太多并行缓存。
对于选项 1,配置池大小可以解决您的问题,但对于选项 2,您可能必须重构代码以将数据保存在较小的块中。
connectionMinimumIdleSize: 100
connectionPoolSize: 750
设置