From 73c8ce2009219cec46dec00f3c09c9b86740a984 Mon Sep 17 00:00:00 2001 From: Anqing Shao Date: Thu, 21 Apr 2016 13:34:17 +0800 Subject: [PATCH] =?UTF-8?q?DATAREDIS-500=20-=20Use=20Hash=20Key=20and=20Ha?= =?UTF-8?q?sh=20Value=20serializers=20in=20RedisTemplate=20executePipeline?= =?UTF-8?q?d(=E2=80=A6).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RedisTemplate executePipelined(RedisCallback) uses now the Hash Key and Hash Value serializers to deserialize the response. Original pull request: #190. CLA: 174020160421053943 (Anqing Shao). --- .../data/redis/core/RedisTemplate.java | 2 +- .../data/redis/core/RedisTemplateTests.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java index 83e02d326..9afc02d79 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java +++ b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java @@ -286,7 +286,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } List closePipeline = connection.closePipeline(); pipelinedClosed = true; - return deserializeMixedResults(closePipeline, resultSerializer, resultSerializer, resultSerializer); + return deserializeMixedResults(closePipeline, resultSerializer, hashKeySerializer, hashValueSerializer); } finally { if (!pipelinedClosed) { connection.closePipeline(); diff --git a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java index 5df2daa3d..dad261901 100644 --- a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java +++ b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java @@ -51,6 +51,7 @@ import org.springframework.data.redis.TestCondition; import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.StringRedisConnection; +import org.springframework.data.redis.connection.jedis.JedisClusterConnection; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.connection.jredis.JredisConnectionFactory; import org.springframework.data.redis.connection.srp.SrpConnectionFactory; @@ -314,6 +315,22 @@ public class RedisTemplateTests { assertEquals(Arrays.asList(new Object[] { 5l, 1l, 2l, Arrays.asList(new Long[] { 10l, 11l }) }), results); } + @Test + public void testExecutePipelinedWidthDifferentHashKeySerializerAndHashValueSerializer() { + assumeTrue(redisTemplate instanceof StringRedisTemplate); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(new GenericToStringSerializer(Long.class)); + redisTemplate.opsForHash().put((K) "foo", "key", 1L); + List results = redisTemplate.executePipelined(new RedisCallback() { + public Object doInRedis(RedisConnection connection) throws DataAccessException { + connection.hGetAll(((StringRedisSerializer) redisTemplate.getKeySerializer()).serialize("foo")); + return null; + } + }); + assertEquals(((Map) results.get(0)).get("key"), 1L); + } + @Test(expected = InvalidDataAccessApiUsageException.class) public void testExecutePipelinedNonNullRedisCallback() { redisTemplate.executePipelined(new RedisCallback() {