迁移到GCP和Cloud Memorystore后,我们的间歇性Redis超时。
我们正在从运行在GKE中的Java Spring应用程序进行连接。在迁移到GCP之前,我们没有这些问题。
与旧环境的一些关键区别:
主要统计数据:
我们正在使用:
>>> df.loc['gameswon'].sum()
312
我们使用以下代码实例化连接:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
我们尝试调整池的大小,但没有帮助。
我们整天间歇性地获得这些例外:
public JedisConnectionFactory getJedisConnectionFactoryOne()
{
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(MAX_TOTAL);
jedisPoolConfig.setMaxIdle(MAX_IDLE);
jedisPoolConfig.setMinIdle(MIN_IDLE);
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);
jedisConnectionFactory.setHostName(REDIS_HOST_1);
jedisConnectionFactory.setPort(REDIS_PORT);
return jedisConnectionFactory;
}
答案 0 :(得分:0)
将客户端的超时时间从默认值(2秒)更改为5秒似乎已完全阻止了错误。
jedisConnectionFactory.setTimeout(5000);
这很奇怪,因为从我们的APM监视来看,它显示p95 redis调用小于20μs,p99 <20ms,最大延迟小于500ms。所以我不完全确定为什么我们会首先收到这么多的超时错误。
一旦快照和发行版结束,我们将升级到spring-data-redis 2.2.x(jedis 3.x)。