DATAREDIS-545 - Support connection-pooling for Redis Cluster with Lettuce.

We now support connection pooling for Cluster connections using Lettuce.

Original Pull Request: #297
This commit is contained in:
Mark Paluch
2017-12-18 14:23:38 +01:00
committed by Christoph Strobl
parent a3d4e4f771
commit 155f45c376
5 changed files with 62 additions and 29 deletions

View File

@@ -68,7 +68,7 @@ public class LettuceClusterConnectionUnitTests {
@Mock RedisClusterClient clusterMock;
@Mock ClusterConnectionProvider connectionProviderMock;
@Mock LettuceConnectionProvider connectionProviderMock;
@Mock ClusterCommandExecutor executorMock;
@Mock ClusterNodeResourceProvider resourceProvider;
@Mock StatefulRedisClusterConnection<byte[], byte[]> sharedConnectionMock;
@@ -355,41 +355,37 @@ public class LettuceClusterConnectionUnitTests {
verify(clusterConnection1Mock, never()).configResetstat();
}
@Test // DATAREDIS-731
@Test // DATAREDIS-731, DATAREDIS-545
public void shouldExecuteOnSharedConnection() {
RedisAdvancedClusterCommands<byte[], byte[]> sync = mock(RedisAdvancedClusterCommands.class);
when(connectionProviderMock.getClient()).thenReturn(clusterMock);
when(sharedConnectionMock.sync()).thenReturn(sync);
LettuceClusterConnection connection = new LettuceClusterConnection(sharedConnectionMock, connectionProviderMock,
executorMock, Duration.ZERO);
clusterMock, executorMock, Duration.ZERO);
connection.keyCommands().del(KEY_1_BYTES);
verify(sync).del(KEY_1_BYTES);
verify(connectionProviderMock).getClient();
verifyNoMoreInteractions(connectionProviderMock);
}
@Test // DATAREDIS-731
@Test // DATAREDIS-731, DATAREDIS-545
public void shouldExecuteOnDedicatedConnection() {
RedisCommands<byte[], byte[]> sync = mock(RedisCommands.class);
StatefulRedisConnection<byte[], byte[]> dedicatedConnection = mock(StatefulRedisConnection.class);
when(connectionProviderMock.getClient()).thenReturn(clusterMock);
when(connectionProviderMock.getConnection(StatefulConnection.class)).thenReturn(dedicatedConnection);
when(dedicatedConnection.sync()).thenReturn(sync);
LettuceClusterConnection connection = new LettuceClusterConnection(sharedConnectionMock, connectionProviderMock,
executorMock, Duration.ZERO);
clusterMock, executorMock, Duration.ZERO);
connection.listCommands().bLPop(1, KEY_1_BYTES);
verify(sync).blpop(1, KEY_1_BYTES);
verify(connectionProviderMock).getClient();
verify(connectionProviderMock).getConnection(StatefulConnection.class);
verifyNoMoreInteractions(connectionProviderMock);
verifyZeroInteractions(sharedConnectionMock);

View File

@@ -33,6 +33,7 @@ import org.springframework.data.redis.StringObjectFactory;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceTestClientResources;
import org.springframework.data.redis.serializer.GenericToStringSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
@@ -203,6 +204,12 @@ public class RedisClusterTemplateTests<K, V> extends RedisTemplateTests<K, V> {
lettuceConnectionFactory.afterPropertiesSet();
LettuceConnectionFactory pooledLettuceConnectionFactory = new LettuceConnectionFactory(
new RedisClusterConfiguration(CLUSTER_NODES), LettucePoolingClientConfiguration.builder()
.clientResources(LettuceTestClientResources.getSharedClientResources()).build());
pooledLettuceConnectionFactory.afterPropertiesSet();
RedisTemplate<String, String> lettuceStringTemplate = new RedisTemplate<>();
lettuceStringTemplate.setDefaultSerializer(StringRedisSerializer.UTF_8);
lettuceStringTemplate.setConnectionFactory(lettuceConnectionFactory);
@@ -233,6 +240,11 @@ public class RedisClusterTemplateTests<K, V> extends RedisTemplateTests<K, V> {
lettuceJackson2JsonPersonTemplate.setValueSerializer(jackson2JsonSerializer);
lettuceJackson2JsonPersonTemplate.afterPropertiesSet();
RedisTemplate<String, String> pooledLettuceStringTemplate = new RedisTemplate<>();
pooledLettuceStringTemplate.setDefaultSerializer(StringRedisSerializer.UTF_8);
pooledLettuceStringTemplate.setConnectionFactory(pooledLettuceConnectionFactory);
pooledLettuceStringTemplate.afterPropertiesSet();
return Arrays.asList(new Object[][] { //
// JEDIS
@@ -249,7 +261,8 @@ public class RedisClusterTemplateTests<K, V> extends RedisTemplateTests<K, V> {
{ lettuceRawTemplate, rawFactory, rawFactory }, //
{ lettucePersonTemplate, stringFactory, personFactory }, //
{ lettuceXstreamStringTemplate, stringFactory, stringFactory }, //
{ lettuceJackson2JsonPersonTemplate, stringFactory, personFactory } //
{ lettuceJackson2JsonPersonTemplate, stringFactory, personFactory }, //
{ pooledLettuceStringTemplate, stringFactory, stringFactory } //
});
}