diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BulkIterable.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BulkIterable.java deleted file mode 100644 index 152f36ce2..000000000 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BulkIterable.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2011 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.keyvalue.redis.core; - -import java.util.Iterator; -import java.util.List; - -/** - * Wrapper class allowing for stream-like access across a list of values. - * - * @author Costin Leau - */ -class BulkIterable implements Iterable { - - private final List list; - private volatile int index = 0; - - public BulkIterable(List list) { - this.list = list; - } - - public boolean hasMore() { - throw new UnsupportedOperationException(); - } - - @Override - public Iterator iterator() { - return new Iterator() { - - @Override - public boolean hasNext() { - return index < list.size(); - } - - @Override - public T next() { - return list.get(index++); - } - - @Override - public void remove() { - throw new UnsupportedOperationException(); - } - }; - } -} diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BulkMapper.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BulkMapper.java index d1388b062..30048a241 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BulkMapper.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BulkMapper.java @@ -21,11 +21,11 @@ import java.util.Iterator; * Mapper translating Redis bulk value responses (typically returned by a sort query) to actual objects. Implementations of this interface do not have to worry * about exception or connection handling. *

- * Typically used by {@link RedisTemplate} sortAndGet methods. + * Typically used by {@link RedisTemplate} sort methods. * * @author Costin Leau */ -public interface BulkMapper { +public interface BulkMapper { - T mapBulk(Iterator valueStream); + T mapBulk(Iterator valueStream); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java index a95cb1bd4..f9c4411c3 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java @@ -196,8 +196,9 @@ public interface RedisOperations { List sort(SortQuery query, RedisSerializer resultSerializer); - List sort(SortQuery query, BulkMapper bulkMapper); + List sort(SortQuery query, BulkMapper bulkMapper); + List sort(SortQuery query, BulkMapper bulkMapper, RedisSerializer resultSerializer); Long sort(SortQuery query, K storeKey); } \ No newline at end of file diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java index 2ddfab695..f2e04732e 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java @@ -1950,28 +1950,26 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return (List) deserializeValues(vals, List.class, resultSerializer); } + @SuppressWarnings("unchecked") @Override - public List sort(SortQuery query, BulkMapper bulkMapper) { - final byte[] rawKey = rawKey(query.getKey()); - final SortParameters params = convertQuery(query, stringSerializer); + public List sort(SortQuery query, BulkMapper bulkMapper) { + return sort(query, bulkMapper, valueSerializer); + } - List vals = execute(new RedisCallback>() { - @Override - public List doInRedis(RedisConnection connection) throws DataAccessException { - return connection.sort(rawKey, params); - } - }, true); + @Override + public List sort(SortQuery query, BulkMapper bulkMapper, RedisSerializer resultSerializer) { + List values = sort(query, resultSerializer); int bulkSize = query.getGetPattern().size(); - List result = new ArrayList(vals.size() / bulkSize + 1); + List result = new ArrayList(values.size() / bulkSize + 1); - final List bulk = new ArrayList(bulkSize); - final List listView = Collections.unmodifiableList(bulk); + final List bulk = new ArrayList(bulkSize); + final List listView = Collections.unmodifiableList(bulk); - for (byte[] bs : vals) { - bulk.add(bs); + for (S s : values) { + bulk.add(s); if (bulk.size() == bulkSize) { - bulkMapper.mapBulk(listView.iterator()); + result.add(bulkMapper.mapBulk(listView.iterator())); bulk.clear(); } } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/query/DefaultSortQuery.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/query/DefaultSortQuery.java index b07a75206..4348e2fa2 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/query/DefaultSortQuery.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/query/DefaultSortQuery.java @@ -72,4 +72,12 @@ class DefaultSortQuery implements SortQuery { public List getGetPattern() { return gets; } + + @Override + public String toString() { + return "DefaultSortQuery [alpha=" + alpha + ", by=" + by + ", gets=" + gets + ", key=" + key + ", limit=" + + limit + ", order=" + order + "]"; + } + + } \ No newline at end of file