diff --git a/src/main/java/org/springframework/data/redis/connection/convert/LongToBooleanConverter.java b/src/main/java/org/springframework/data/redis/connection/convert/LongToBooleanConverter.java index a6cc0d513..8acccc631 100644 --- a/src/main/java/org/springframework/data/redis/connection/convert/LongToBooleanConverter.java +++ b/src/main/java/org/springframework/data/redis/connection/convert/LongToBooleanConverter.java @@ -25,6 +25,8 @@ import org.springframework.core.convert.converter.Converter; */ public class LongToBooleanConverter implements Converter { + public static final LongToBooleanConverter INSTANCE = new LongToBooleanConverter(); + /* * (non-Javadoc) * @see org.springframework.core.convert.converter.Converter#convert(Object) diff --git a/src/main/java/org/springframework/data/redis/connection/convert/StringToRedisClientInfoConverter.java b/src/main/java/org/springframework/data/redis/connection/convert/StringToRedisClientInfoConverter.java index 1986fea28..7da91f26d 100644 --- a/src/main/java/org/springframework/data/redis/connection/convert/StringToRedisClientInfoConverter.java +++ b/src/main/java/org/springframework/data/redis/connection/convert/StringToRedisClientInfoConverter.java @@ -35,6 +35,8 @@ import org.springframework.data.redis.core.types.RedisClientInfo.RedisClientInfo */ public class StringToRedisClientInfoConverter implements Converter> { + public static final StringToRedisClientInfoConverter INSTANCE = new StringToRedisClientInfoConverter(); + /* * (non-Javadoc) * @see org.springframework.core.convert.converter.Converter#convert(Object) diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java index e89e0c3ee..d808cee84 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java @@ -598,21 +598,23 @@ public class LettuceConnection extends AbstractRedisConnection { isMulti = false; try { + Converter exceptionConverter = this::convertLettuceAccessException; + if (isPipelined()) { RedisFuture exec = getAsyncDedicatedRedisCommands().exec(); LettuceTransactionResultConverter resultConverter = new LettuceTransactionResultConverter( - new LinkedList<>(txResults), LettuceConverters.exceptionConverter()); + new LinkedList<>(txResults), exceptionConverter); pipeline(newLettuceResult(exec, source -> resultConverter - .convert(LettuceConverters.transactionResultUnwrapper().convert((TransactionResult) source)))); + .convert(LettuceConverters.transactionResultUnwrapper().convert(source)))); return null; } - TransactionResult transactionResult = (getDedicatedRedisCommands()).exec(); + TransactionResult transactionResult = getDedicatedRedisCommands().exec(); List results = LettuceConverters.transactionResultUnwrapper().convert(transactionResult); return convertPipelineAndTxResults - ? new LettuceTransactionResultConverter(txResults, LettuceConverters.exceptionConverter()).convert(results) + ? new LettuceTransactionResultConverter(txResults, exceptionConverter).convert(results) : results; } catch (Exception ex) { throw convertLettuceAccessException(ex); diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java index 6d334f17d..60177e2ac 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java @@ -84,31 +84,11 @@ import org.springframework.util.StringUtils; * @author Ninad Divadkar * @author dengliming */ -abstract public class LettuceConverters extends Converters { +public abstract class LettuceConverters extends Converters { - private static final Converter DATE_TO_LONG; - private static final Converter, Set> BYTES_LIST_TO_BYTES_SET; - private static final Converter BYTES_TO_STRING; - private static final Converter STRING_TO_BYTES; - private static final Converter, List> BYTES_SET_TO_BYTES_LIST; - private static final Converter, List> BYTES_COLLECTION_TO_BYTES_LIST; - private static final Converter, List> KEY_VALUE_TO_BYTES_LIST; - private static final Converter>, Set> SCORED_VALUES_TO_TUPLE_SET; - private static final Converter>, List> SCORED_VALUES_TO_TUPLE_LIST; - private static final Converter, Tuple> SCORED_VALUE_TO_TUPLE; private static final Converter EXCEPTION_CONVERTER = new LettuceExceptionConverter(); - private static final Converter LONG_TO_BOOLEAN = new LongToBooleanConverter(); - private static final Converter, Map> BYTES_LIST_TO_MAP; - private static final Converter, List> BYTES_LIST_TO_TUPLE_LIST_CONVERTER; - private static final Converter> STRING_TO_LIST_OF_CLIENT_INFO = new StringToRedisClientInfoConverter(); - private static final Converter> PARTITIONS_TO_CLUSTER_NODES; - private static Converter CLUSTER_NODE_TO_CLUSTER_NODE_CONVERTER; - private static final Converter, Long> BYTES_LIST_TO_TIME_CONVERTER; - public static final Converter GEO_COORDINATE_TO_POINT_CONVERTER; private static final ListConverter GEO_COORDINATE_LIST_TO_POINT_LIST_CONVERTER; - private static final Converter, Object> KEY_VALUE_UNWRAPPER; private static final ListConverter, Object> KEY_VALUE_LIST_UNWRAPPER; - private static final Converter> TRANSACTION_RESULT_UNWRAPPER; public static final byte[] PLUS_BYTES; public static final byte[] MINUS_BYTES; @@ -120,74 +100,83 @@ abstract public class LettuceConverters extends Converters { static { - DATE_TO_LONG = source -> source != null ? source.getTime() : null; + PLUS_BYTES = toBytes("+"); + MINUS_BYTES = toBytes("-"); + POSITIVE_INFINITY_BYTES = toBytes("+inf"); + NEGATIVE_INFINITY_BYTES = toBytes("-inf"); - BYTES_LIST_TO_BYTES_SET = results -> results != null ? new LinkedHashSet<>(results) : null; + GEO_COORDINATE_LIST_TO_POINT_LIST_CONVERTER = new ListConverter<>(LettuceConverters::geoCoordinatesToPoint); - BYTES_TO_STRING = source -> { - if (source == null || Arrays.equals(source, new byte[0])) { - return null; - } - return new String(source); - }; + KEY_VALUE_LIST_UNWRAPPER = new ListConverter<>(source -> source.getValueOrElse(null)); + } - STRING_TO_BYTES = source -> { - if (source == null) { - return null; - } - return source.getBytes(); - }; + @Deprecated + public static List toTuple(List source) { - BYTES_SET_TO_BYTES_LIST = results -> results != null ? new ArrayList<>(results) : null; + if (CollectionUtils.isEmpty(source)) { + return Collections.emptyList(); + } - BYTES_COLLECTION_TO_BYTES_LIST = results -> { + List tuples = new ArrayList<>(); + Iterator it = source.iterator(); + while (it.hasNext()) { + tuples.add(new DefaultTuple(it.next(), it.hasNext() ? Double.valueOf(toString(it.next())) : null)); + } - if (results instanceof List) { - return (List) results; - } - return results != null ? new ArrayList<>(results) : null; - }; + return tuples; + } - KEY_VALUE_TO_BYTES_LIST = source -> { + @Deprecated + public static Converter, List> bytesListToTupleListConverter() { + return LettuceConverters::toTuple; + } - if (source == null) { - return null; - } - List list = new ArrayList<>(2); - list.add(source.getKey()); - list.add(source.getValue()); + public static Point geoCoordinatesToPoint(@Nullable GeoCoordinates geoCoordinate) { + return geoCoordinate != null ? new Point(geoCoordinate.getX().doubleValue(), geoCoordinate.getY().doubleValue()) + : null; + } - return list; - }; - BYTES_LIST_TO_MAP = source -> { + public static Converter> stringToRedisClientListConverter() { + return LettuceConverters::toListOfRedisClientInformation; + } - if (CollectionUtils.isEmpty(source)) { - return Collections.emptyMap(); - } + @Deprecated + public static Converter dateToLong() { + return LettuceConverters::toLong; + } - Map target = new LinkedHashMap<>(); + @Deprecated + public static Converter, Set> bytesListToBytesSet() { + return LettuceConverters::toBytesSet; + } - Iterator kv = source.iterator(); - while (kv.hasNext()) { - target.put(kv.next(), kv.hasNext() ? kv.next() : null); - } + @Deprecated + public static Converter bytesToString() { + return LettuceConverters::toString; + } - return target; - }; + @Deprecated + public static Converter, List> keyValueToBytesList() { + return LettuceConverters::toBytesList; + } - SCORED_VALUES_TO_TUPLE_SET = source -> { + @Deprecated + public static Converter, List> bytesSetToBytesList() { + return LettuceConverters::toBytesList; + } - if (source == null) { - return null; - } - Set tuples = new LinkedHashSet<>(source.size()); - for (ScoredValue value : source) { - tuples.add(LettuceConverters.toTuple(value)); - } - return tuples; - }; + @Deprecated + public static Converter, List> bytesCollectionToBytesList() { + return LettuceConverters::toBytesList; + } - SCORED_VALUES_TO_TUPLE_LIST = source -> { + @Deprecated + public static Converter>, Set> scoredValuesToTupleSet() { + return LettuceConverters::toTupleSet; + } + + public static Converter>, List> scoredValuesToTupleList() { + return source -> { if (source == null) { return null; @@ -198,180 +187,14 @@ abstract public class LettuceConverters extends Converters { } return tuples; }; - - SCORED_VALUE_TO_TUPLE = source -> source != null - ? new DefaultTuple(source.getValue(), Double.valueOf(source.getScore())) - : null; - - BYTES_LIST_TO_TUPLE_LIST_CONVERTER = source -> { - - if (CollectionUtils.isEmpty(source)) { - return Collections.emptyList(); - } - - List tuples = new ArrayList<>(); - Iterator it = source.iterator(); - while (it.hasNext()) { - tuples.add(new DefaultTuple(it.next(), it.hasNext() ? Double.valueOf(toString(it.next())) : null)); - } - return tuples; - }; - - PARTITIONS_TO_CLUSTER_NODES = new Converter>() { - - @Override - public List convert(Partitions source) { - - if (source == null) { - return Collections.emptyList(); - } - List nodes = new ArrayList<>(); - for (io.lettuce.core.cluster.models.partitions.RedisClusterNode node : source) { - nodes.add(CLUSTER_NODE_TO_CLUSTER_NODE_CONVERTER.convert(node)); - } - - return nodes; - }; - - }; - - CLUSTER_NODE_TO_CLUSTER_NODE_CONVERTER = new Converter() { - - @Override - public RedisClusterNode convert(io.lettuce.core.cluster.models.partitions.RedisClusterNode source) { - - Set flags = parseFlags(source.getFlags()); - - return RedisClusterNode.newRedisClusterNode().listeningAt(source.getUri().getHost(), source.getUri().getPort()) - .withId(source.getNodeId()).promotedAs(flags.contains(Flag.MASTER) ? NodeType.MASTER : NodeType.SLAVE) - .serving(new SlotRange(source.getSlots())).withFlags(flags) - .linkState(source.isConnected() ? LinkState.CONNECTED : LinkState.DISCONNECTED).slaveOf(source.getSlaveOf()) - .build(); - } - - private Set parseFlags(Set source) { - - Set flags = new LinkedHashSet<>(source != null ? source.size() : 8, 1); - for (NodeFlag flag : source) { - switch (flag) { - case NOFLAGS: - flags.add(Flag.NOFLAGS); - break; - case EVENTUAL_FAIL: - flags.add(Flag.PFAIL); - break; - case FAIL: - flags.add(Flag.FAIL); - break; - case HANDSHAKE: - flags.add(Flag.HANDSHAKE); - break; - case MASTER: - flags.add(Flag.MASTER); - break; - case MYSELF: - flags.add(Flag.MYSELF); - break; - case NOADDR: - flags.add(Flag.NOADDR); - break; - case SLAVE: - flags.add(Flag.SLAVE); - break; - } - } - return flags; - } - - }; - - PLUS_BYTES = toBytes("+"); - MINUS_BYTES = toBytes("-"); - POSITIVE_INFINITY_BYTES = toBytes("+inf"); - NEGATIVE_INFINITY_BYTES = toBytes("-inf"); - - BYTES_LIST_TO_TIME_CONVERTER = source -> { - - Assert.notEmpty(source, "Received invalid result from server. Expected 2 items in collection."); - Assert.isTrue(source.size() == 2, - "Received invalid nr of arguments from redis server. Expected 2 received " + source.size()); - - return toTimeMillis(toString(source.get(0)), toString(source.get(1))); - }; - - GEO_COORDINATE_TO_POINT_CONVERTER = geoCoordinate -> geoCoordinate != null - ? new Point(geoCoordinate.getX().doubleValue(), geoCoordinate.getY().doubleValue()) - : null; - GEO_COORDINATE_LIST_TO_POINT_LIST_CONVERTER = new ListConverter<>(GEO_COORDINATE_TO_POINT_CONVERTER); - - KEY_VALUE_UNWRAPPER = source -> source.getValueOrElse(null); - - KEY_VALUE_LIST_UNWRAPPER = new ListConverter<>(KEY_VALUE_UNWRAPPER); - - TRANSACTION_RESULT_UNWRAPPER = transactionResult -> transactionResult.stream().collect(Collectors.toList()); - - } - - public static List toTuple(List list) { - return BYTES_LIST_TO_TUPLE_LIST_CONVERTER.convert(list); - } - - public static Converter, List> bytesListToTupleListConverter() { - return BYTES_LIST_TO_TUPLE_LIST_CONVERTER; - } - - public static Point geoCoordinatesToPoint(GeoCoordinates geoCoordinates) { - return GEO_COORDINATE_TO_POINT_CONVERTER.convert(geoCoordinates); - } - - public static Converter> stringToRedisClientListConverter() { - - return source -> { - - if (!StringUtils.hasText(source)) { - return Collections.emptyList(); - } - - return STRING_TO_LIST_OF_CLIENT_INFO.convert(source.split("\\r?\\n")); - }; - } - - public static Converter dateToLong() { - return DATE_TO_LONG; - } - - public static Converter, Set> bytesListToBytesSet() { - return BYTES_LIST_TO_BYTES_SET; - } - - public static Converter bytesToString() { - return BYTES_TO_STRING; - } - - public static Converter, List> keyValueToBytesList() { - return KEY_VALUE_TO_BYTES_LIST; - } - - public static Converter, List> bytesSetToBytesList() { - return BYTES_COLLECTION_TO_BYTES_LIST; - } - - public static Converter, List> bytesCollectionToBytesList() { - return BYTES_COLLECTION_TO_BYTES_LIST; - } - - public static Converter>, Set> scoredValuesToTupleSet() { - return SCORED_VALUES_TO_TUPLE_SET; - } - - public static Converter>, List> scoredValuesToTupleList() { - return SCORED_VALUES_TO_TUPLE_LIST; } + @Deprecated public static Converter, Tuple> scoredValueToTuple() { - return SCORED_VALUE_TO_TUPLE; + return LettuceConverters::toTuple; } + @Deprecated public static Converter exceptionConverter() { return EXCEPTION_CONVERTER; } @@ -381,35 +204,57 @@ abstract public class LettuceConverters extends Converters { * @sice 1.3 */ public static Converter longToBooleanConverter() { - return LONG_TO_BOOLEAN; + return LongToBooleanConverter.INSTANCE; } - public static Long toLong(Date source) { - return DATE_TO_LONG.convert(source); + public static Long toLong(@Nullable Date source) { + return source != null ? source.getTime() : null; } - public static Set toBytesSet(List source) { - return BYTES_LIST_TO_BYTES_SET.convert(source); + public static Set toBytesSet(@Nullable List source) { + return source != null ? new LinkedHashSet<>(source) : null; } public static List toBytesList(KeyValue source) { - return KEY_VALUE_TO_BYTES_LIST.convert(source); + + if (source == null) { + return null; + } + List list = new ArrayList<>(2); + list.add(source.getKey()); + list.add(source.getValue()); + + return list; } public static List toBytesList(Collection source) { - return BYTES_COLLECTION_TO_BYTES_LIST.convert(source); + if (source instanceof List) { + return (List) source; + } + return source != null ? new ArrayList<>(source) : null; } - public static Set toTupleSet(List> source) { - return SCORED_VALUES_TO_TUPLE_SET.convert(source); + @Deprecated + public static Set toTupleSet(@Nullable List> source) { + if (source == null) { + return null; + } + Set tuples = new LinkedHashSet<>(source.size()); + for (ScoredValue value : source) { + tuples.add(LettuceConverters.toTuple(value)); + } + return tuples; } - public static Tuple toTuple(ScoredValue source) { - return SCORED_VALUE_TO_TUPLE.convert(source); + public static Tuple toTuple(@Nullable ScoredValue source) { + return source != null ? new DefaultTuple(source.getValue(), Double.valueOf(source.getScore())) : null; } - public static String toString(byte[] source) { - return BYTES_TO_STRING.convert(source); + public static String toString(@Nullable byte[] source) { + if (source == null || Arrays.equals(source, new byte[0])) { + return null; + } + return new String(source); } public static ScriptOutputType toScriptOutputType(ReturnType returnType) { @@ -440,11 +285,23 @@ abstract public class LettuceConverters extends Converters { } public static Map toMap(List source) { - return BYTES_LIST_TO_MAP.convert(source); + if (CollectionUtils.isEmpty(source)) { + return Collections.emptyMap(); + } + + Map target = new LinkedHashMap<>(); + + Iterator kv = source.iterator(); + while (kv.hasNext()) { + target.put(kv.next(), kv.hasNext() ? kv.next() : null); + } + + return target; } + @Deprecated public static Converter, Map> bytesListToMapConverter() { - return BYTES_LIST_TO_MAP; + return LettuceConverters::toMap; } public static SortArgs toSortArgs(SortParameters params) { @@ -480,9 +337,15 @@ abstract public class LettuceConverters extends Converters { } public static List toListOfRedisClientInformation(String clientList) { - return stringToRedisClientListConverter().convert(clientList); + + if (!StringUtils.hasText(clientList)) { + return Collections.emptyList(); + } + + return StringToRedisClientInfoConverter.INSTANCE.convert(clientList.split("\\r?\\n")); } + @Deprecated public static byte[][] subarray(byte[][] input, int index) { if (input.length > index) { @@ -494,6 +357,7 @@ abstract public class LettuceConverters extends Converters { return null; } + @Deprecated public static String boundaryToStringForZRange(Boundary boundary, String defaultValue) { if (boundary == null || boundary.getValue() == null) { @@ -668,8 +532,11 @@ abstract public class LettuceConverters extends Converters { return builder.build(); } - public static byte[] toBytes(String source) { - return STRING_TO_BYTES.convert(source); + public static byte[] toBytes(@Nullable String source) { + if (source == null) { + return null; + } + return source.getBytes(); } public static byte[] toBytes(Integer source) { @@ -698,6 +565,7 @@ abstract public class LettuceConverters extends Converters { * @return * @since 1.6 */ + @Deprecated public static String boundaryToBytesForZRange(Boundary boundary, byte[] defaultValue) { if (boundary == null || boundary.getValue() == null) { @@ -714,6 +582,7 @@ abstract public class LettuceConverters extends Converters { * @return * @since 1.6 */ + @Deprecated public static String boundaryToBytesForZRangeByLex(Boundary boundary, byte[] defaultValue) { if (boundary == null || boundary.getValue() == null) { @@ -747,8 +616,19 @@ abstract public class LettuceConverters extends Converters { return toString(ByteUtils.getBytes(buffer)); } - public static List partitionsToClusterNodes(Partitions partitions) { - return PARTITIONS_TO_CLUSTER_NODES.convert(partitions); + public static List partitionsToClusterNodes(@Nullable Partitions source) { + + if (source == null) { + return Collections.emptyList(); + } + + List nodes = new ArrayList<>(); + + for (io.lettuce.core.cluster.models.partitions.RedisClusterNode node : source) { + nodes.add(toRedisClusterNode(node)); + } + + return nodes; } /** @@ -757,7 +637,48 @@ abstract public class LettuceConverters extends Converters { * @since 1.7 */ public static RedisClusterNode toRedisClusterNode(io.lettuce.core.cluster.models.partitions.RedisClusterNode source) { - return CLUSTER_NODE_TO_CLUSTER_NODE_CONVERTER.convert(source); + + Set flags = parseFlags(source.getFlags()); + + return RedisClusterNode.newRedisClusterNode().listeningAt(source.getUri().getHost(), source.getUri().getPort()) + .withId(source.getNodeId()).promotedAs(flags.contains(Flag.MASTER) ? NodeType.MASTER : NodeType.SLAVE) + .serving(new SlotRange(source.getSlots())).withFlags(flags) + .linkState(source.isConnected() ? LinkState.CONNECTED : LinkState.DISCONNECTED).slaveOf(source.getSlaveOf()) + .build(); + } + + private static Set parseFlags(@Nullable Set source) { + + Set flags = new LinkedHashSet<>(source != null ? source.size() : 8, 1); + for (NodeFlag flag : source) { + switch (flag) { + case NOFLAGS: + flags.add(Flag.NOFLAGS); + break; + case EVENTUAL_FAIL: + flags.add(Flag.PFAIL); + break; + case FAIL: + flags.add(Flag.FAIL); + break; + case HANDSHAKE: + flags.add(Flag.HANDSHAKE); + break; + case MASTER: + flags.add(Flag.MASTER); + break; + case MYSELF: + flags.add(Flag.MYSELF); + break; + case NOADDR: + flags.add(Flag.NOADDR); + break; + case SLAVE: + flags.add(Flag.SLAVE); + break; + } + } + return flags; } /** @@ -805,7 +726,15 @@ abstract public class LettuceConverters extends Converters { } static Converter, Long> toTimeConverter() { - return BYTES_LIST_TO_TIME_CONVERTER; + + return source -> { + + Assert.notEmpty(source, "Received invalid result from server. Expected 2 items in collection."); + Assert.isTrue(source.size() == 2, + "Received invalid nr of arguments from redis server. Expected 2 received " + source.size()); + + return toTimeMillis(toString(source.get(0)), toString(source.get(1))); + }; } /** @@ -989,6 +918,7 @@ abstract public class LettuceConverters extends Converters { * @return * @since 1.8 */ + @Deprecated public static ListConverter geoCoordinatesToPointConverter() { return GEO_COORDINATE_LIST_TO_POINT_LIST_CONVERTER; } @@ -998,12 +928,13 @@ abstract public class LettuceConverters extends Converters { * @since 2.0 */ @SuppressWarnings("unchecked") + @Deprecated public static ListConverter, V> keyValueListUnwrapper() { return (ListConverter) KEY_VALUE_LIST_UNWRAPPER; } public static Converter> transactionResultUnwrapper() { - return TRANSACTION_RESULT_UNWRAPPER; + return transactionResult -> transactionResult.stream().collect(Collectors.toList()); } /** @@ -1115,7 +1046,7 @@ abstract public class LettuceConverters extends Converters { @Override public GeoResult> convert(GeoWithin source) { - Point point = GEO_COORDINATE_TO_POINT_CONVERTER.convert(source.getCoordinates()); + Point point = geoCoordinatesToPoint(source.getCoordinates()); return new GeoResult<>(new GeoLocation<>(source.getMember(), point), new Distance(source.getDistance() != null ? source.getDistance() : 0D, metric)); diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java index 5822cd36c..9b8c3b0f0 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java @@ -165,7 +165,7 @@ class LettuceGeoCommands implements RedisGeoCommands { Assert.noNullElements(members, "Members must not contain null!"); return connection.invoke().fromMany(RedisGeoAsyncCommands::geopos, key, members) - .toList(LettuceConverters.GEO_COORDINATE_TO_POINT_CONVERTER); + .toList(LettuceConverters::geoCoordinatesToPoint); } /* diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceHashCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceHashCommands.java index 627e107c9..dd210fad7 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceHashCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceHashCommands.java @@ -159,7 +159,7 @@ class LettuceHashCommands implements RedisHashCommands { Assert.notNull(key, "Key must not be null!"); - return connection.invoke().from(RedisHashAsyncCommands::hkeys, key).get(LettuceConverters.bytesListToBytesSet()); + return connection.invoke().fromMany(RedisHashAsyncCommands::hkeys, key).toSet(); } /* diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java index 5b8edfbbf..1fd74e326 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceKeyCommands.java @@ -135,7 +135,7 @@ class LettuceKeyCommands implements RedisKeyCommands { Assert.notNull(pattern, "Pattern must not be null!"); - return connection.invoke().from(RedisKeyAsyncCommands::keys, pattern).get(LettuceConverters.bytesListToBytesSet()); + return connection.invoke().fromMany(RedisKeyAsyncCommands::keys, pattern).toSet(); } /** @@ -406,7 +406,7 @@ class LettuceKeyCommands implements RedisKeyCommands { Assert.notNull(key, "Key must not be null!"); - return connection.invokeStatus().from(RedisKeyAsyncCommands::objectEncoding, key).getOrElse(ValueEncoding::of, + return connection.invoke().from(RedisKeyAsyncCommands::objectEncoding, key).getOrElse(ValueEncoding::of, () -> RedisValueEncoding.VACANT); } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceListCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceListCommands.java index 68850272c..5ba9aaae9 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceListCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceListCommands.java @@ -15,9 +15,11 @@ */ package org.springframework.data.redis.connection.lettuce; +import io.lettuce.core.KeyValue; import io.lettuce.core.LPosArgs; import io.lettuce.core.api.async.RedisListAsyncCommands; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -234,7 +236,16 @@ class LettuceListCommands implements RedisListCommands { Assert.noNullElements(keys, "Keys must not contain null elements!"); return connection.invoke(connection.getAsyncDedicatedConnection()) - .from(RedisListAsyncCommands::blpop, timeout, keys).get(LettuceConverters.keyValueToBytesList()); + .from(RedisListAsyncCommands::blpop, timeout, keys).get(LettuceListCommands::toBytesList); + } + + private static List toBytesList(KeyValue source) { + + List list = new ArrayList<>(2); + list.add(source.getKey()); + list.add(source.getValue()); + + return list; } /* @@ -248,7 +259,7 @@ class LettuceListCommands implements RedisListCommands { Assert.noNullElements(keys, "Keys must not contain null elements!"); return connection.invoke(connection.getAsyncDedicatedConnection()) - .from(RedisListAsyncCommands::brpop, timeout, keys).get(LettuceConverters.keyValueToBytesList()); + .from(RedisListAsyncCommands::brpop, timeout, keys).get(LettuceListCommands::toBytesList); } /* diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java index 0bcf82c87..68fe9fbda 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java @@ -68,7 +68,7 @@ class LettuceServerCommands implements RedisServerCommands { */ @Override public Long lastSave() { - return connection.invoke().from(RedisServerAsyncCommands::lastsave).get(LettuceConverters.dateToLong()); + return connection.invoke().from(RedisServerAsyncCommands::lastsave).get(LettuceConverters::toLong); } /* @@ -241,7 +241,7 @@ class LettuceServerCommands implements RedisServerCommands { */ @Override public String getClientName() { - return connection.invoke().from(RedisServerAsyncCommands::clientGetname).get(LettuceConverters.bytesToString()); + return connection.invoke().from(RedisServerAsyncCommands::clientGetname).get(LettuceConverters::toString); } /*