Skip to content

Commit 0a918c5

Browse files
argszeromp911de
authored andcommitted
DATAREDIS-500 - Use Hash Key and Hash Value serializers in RedisTemplate executePipelined(…).
RedisTemplate executePipelined(RedisCallback) uses now the Hash Key and Hash Value serializers to deserialize the response. Original pull request: #190. CLA: 174020160421053943 (Anqing Shao).
1 parent 5ff68b2 commit 0a918c5

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/main/java/org/springframework/data/redis/core/RedisTemplate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ public List<Object> doInRedis(RedisConnection connection) throws DataAccessExcep
273273
}
274274
List<Object> closePipeline = connection.closePipeline();
275275
pipelinedClosed = true;
276-
return deserializeMixedResults(closePipeline, resultSerializer, resultSerializer, resultSerializer);
276+
return deserializeMixedResults(closePipeline, resultSerializer, hashKeySerializer, hashValueSerializer);
277277
} finally {
278278
if (!pipelinedClosed) {
279279
connection.closePipeline();

src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.springframework.data.redis.connection.DataType;
5050
import org.springframework.data.redis.connection.RedisConnection;
5151
import org.springframework.data.redis.connection.StringRedisConnection;
52+
import org.springframework.data.redis.connection.jedis.JedisClusterConnection;
5253
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
5354
import org.springframework.data.redis.connection.jredis.JredisConnectionFactory;
5455
import org.springframework.data.redis.connection.srp.SrpConnectionFactory;
@@ -305,6 +306,22 @@ public Object doInRedis(RedisConnection connection) throws DataAccessException {
305306
assertEquals(Arrays.asList(new Object[] { 5l, 1l, 2l, Arrays.asList(new Long[] { 10l, 11l }) }), results);
306307
}
307308

309+
@Test
310+
public void testExecutePipelinedWidthDifferentHashKeySerializerAndHashValueSerializer() {
311+
assumeTrue(redisTemplate instanceof StringRedisTemplate);
312+
redisTemplate.setKeySerializer(new StringRedisSerializer());
313+
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
314+
redisTemplate.setHashValueSerializer(new GenericToStringSerializer<Long>(Long.class));
315+
redisTemplate.opsForHash().put((K) "foo", "key", 1L);
316+
List<Object> results = redisTemplate.executePipelined(new RedisCallback() {
317+
public Object doInRedis(RedisConnection connection) throws DataAccessException {
318+
connection.hGetAll(((StringRedisSerializer) redisTemplate.getKeySerializer()).serialize("foo"));
319+
return null;
320+
}
321+
});
322+
assertEquals(((Map) results.get(0)).get("key"), 1L);
323+
}
324+
308325
@Test(expected = InvalidDataAccessApiUsageException.class)
309326
public void testExecutePipelinedNonNullRedisCallback() {
310327
redisTemplate.executePipelined(new RedisCallback<String>() {

0 commit comments

Comments
 (0)