Add deserialize of pipeline results to DefaultStringRedisConnection
DATAREDIS-200
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -34,6 +34,8 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
*/
|
||||
public class StringRedisTemplate extends RedisTemplate<String, String> {
|
||||
|
||||
private boolean deserializePipelineResults = true;
|
||||
|
||||
/**
|
||||
* Constructs a new <code>StringRedisTemplate</code> instance.
|
||||
* {@link #setConnectionFactory(RedisConnectionFactory)} and {@link #afterPropertiesSet()} still need to be called.
|
||||
@@ -58,8 +60,20 @@ public class StringRedisTemplate extends RedisTemplate<String, String> {
|
||||
afterPropertiesSet();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Specifies if pipelined results should be deserialized to Strings.
|
||||
* If false, results of {@link StringRedisConnection#closePipeline()} will be of the
|
||||
* type returned by the underlying connection
|
||||
*
|
||||
* @param deserializePipelineResults Whether or not to deserialize pipeline results
|
||||
*/
|
||||
public void setDeserializePipelineResults(boolean deserializePipelineResults) {
|
||||
this.deserializePipelineResults = deserializePipelineResults;
|
||||
}
|
||||
|
||||
protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
|
||||
return new DefaultStringRedisConnection(connection);
|
||||
DefaultStringRedisConnection stringConn = new DefaultStringRedisConnection(connection);
|
||||
stringConn.setDeserializePipelineResults(deserializePipelineResults);
|
||||
return stringConn;
|
||||
}
|
||||
}
|
||||
@@ -94,6 +94,7 @@ public abstract class AbstractConnectionIntegrationTests {
|
||||
public void setUp() {
|
||||
byteConnection = connectionFactory.getConnection();
|
||||
connection = new DefaultStringRedisConnection(byteConnection);
|
||||
((DefaultStringRedisConnection)connection).setDeserializePipelineResults(false);
|
||||
}
|
||||
|
||||
@After
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,7 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.springframework.data.redis.SpinBarrier.waitFor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.After;
|
||||
@@ -111,4 +112,38 @@ public class StringRedisTemplateTests {
|
||||
});
|
||||
assertEquals(value,"it");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringTemplateExecutePipelineResultsConverted() {
|
||||
String result = redisTemplate.execute(new RedisCallback<String>() {
|
||||
public String doInRedis(RedisConnection connection) {
|
||||
StringRedisConnection stringConn = (StringRedisConnection) connection;
|
||||
stringConn.openPipeline();
|
||||
stringConn.set("foo", "bar");
|
||||
stringConn.get("foo");
|
||||
List<Object> results = stringConn.closePipeline();
|
||||
return (String) results.get(0);
|
||||
}
|
||||
});
|
||||
assertEquals("bar",result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringTemplateExecutePipelineResultsNotConverted() {
|
||||
final StringRedisTemplate template2 = new StringRedisTemplate(redisTemplate.getConnectionFactory());
|
||||
template2.setDeserializePipelineResults(false);
|
||||
template2.afterPropertiesSet();
|
||||
String result = template2.execute(new RedisCallback<String>() {
|
||||
public String doInRedis(RedisConnection connection) {
|
||||
StringRedisConnection stringConn = (StringRedisConnection) connection;
|
||||
stringConn.openPipeline();
|
||||
stringConn.set("foo", "bar");
|
||||
stringConn.get("foo");
|
||||
List<Object> results = stringConn.closePipeline();
|
||||
// Results should be in byte[], not deserialized to String
|
||||
return template2.getStringSerializer().deserialize((byte[]) results.get(0));
|
||||
}
|
||||
});
|
||||
assertEquals("bar",result);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user