From 7cbeca1f48e5b140ecf014cfe5a74f704f2e9db0 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 3 Mar 2021 10:10:22 +0100 Subject: [PATCH] Polishing. Remove ZAddArgs.empty() method to avoid confusion with none() method. Use NONE constant only internally. Adapt calling methods. Reformat code. See #1794 Original pull request: #1988. --- .../DefaultStringRedisConnection.java | 18 ++++++ .../redis/connection/RedisZSetCommands.java | 21 +++---- .../connection/StringRedisConnection.java | 8 +-- .../lettuce/LettuceReactiveZSetCommands.java | 28 ++++----- .../lettuce/LettuceZSetCommands.java | 61 ++++++++++--------- .../redis/core/DefaultZSetOperations.java | 10 ++- 6 files changed, 79 insertions(+), 67 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java index 547b028ed..83d57d2ae 100644 --- a/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java @@ -2684,6 +2684,15 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco return touch(serializeMulti(keys)); } + /* + * (non-Javadoc) + * @see org.springframework.data.redis.connection.StringRedisConnection#zAdd(java.lang.String, double, java.lang.String) + */ + @Override + public Boolean zAdd(String key, double score, String value) { + return zAdd(serialize(key), score, serialize(value)); + } + /* * (non-Javadoc) * @see org.springframework.data.redis.connection.StringRedisConnection#zAdd(java.lang.String, double, java.lang.String, org.springframework.data.redis.connection.RedisZSetCommands.ZAddArgs) @@ -2693,6 +2702,15 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco return zAdd(serialize(key), score, serialize(value), args); } + /* + * (non-Javadoc) + * @see org.springframework.data.redis.connection.StringRedisConnection#zAdd(java.lang.String, java.util.Set) + */ + @Override + public Long zAdd(String key, Set tuples) { + return zAdd(serialize(key), stringTupleToTuple.convert(tuples)); + } + /* * (non-Javadoc) * @see org.springframework.data.redis.connection.StringRedisConnection#zAdd(java.lang.String, java.util.Set, org.springframework.data.redis.connection.RedisZSetCommands.ZAddArgs) diff --git a/src/main/java/org/springframework/data/redis/connection/RedisZSetCommands.java b/src/main/java/org/springframework/data/redis/connection/RedisZSetCommands.java index bb48bc551..fa8f5ef74 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisZSetCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisZSetCommands.java @@ -17,7 +17,7 @@ package org.springframework.data.redis.connection; import java.util.Arrays; import java.util.Collections; -import java.util.LinkedHashSet; +import java.util.EnumSet; import java.util.List; import java.util.Set; import java.util.function.DoubleUnaryOperator; @@ -400,13 +400,13 @@ public interface RedisZSetCommands { /** * {@code ZADD} specific arguments.
* Looking of the {@code INCR} flag? Use the {@code ZINCRBY} operation instead. - * - * @since 2.3 + * + * @since 2.5 * @see Redis Documentation: ZADD */ class ZAddArgs { - private static final ZAddArgs NONE = new ZAddArgs(Collections.emptySet()); + private static final ZAddArgs NONE = new ZAddArgs(EnumSet.noneOf(Flag.class)); private final Set flags; @@ -414,18 +414,11 @@ public interface RedisZSetCommands { this.flags = flags; } - /** - * @return immutable {@link ZAddArgs}. - */ - public static ZAddArgs none() { - return NONE; - } - /** * @return new instance of {@link ZAddArgs} without any flags set. */ public static ZAddArgs empty() { - return new ZAddArgs(new LinkedHashSet<>(5)); + return new ZAddArgs(EnumSet.noneOf(Flag.class)); } /** @@ -573,7 +566,7 @@ public interface RedisZSetCommands { */ @Nullable default Boolean zAdd(byte[] key, double score, byte[] value) { - return zAdd(key, score, value, ZAddArgs.none()); + return zAdd(key, score, value, ZAddArgs.NONE); } /** @@ -601,7 +594,7 @@ public interface RedisZSetCommands { */ @Nullable default Long zAdd(byte[] key, Set tuples) { - return zAdd(key, tuples, ZAddArgs.none()); + return zAdd(key, tuples, ZAddArgs.NONE); } /** diff --git a/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java b/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java index b5bd7193e..c3f2ad9fb 100644 --- a/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java @@ -1102,9 +1102,7 @@ public interface StringRedisConnection extends RedisConnection { * @see Redis Documentation: ZADD * @see RedisZSetCommands#zAdd(byte[], double, byte[]) */ - default Boolean zAdd(String key, double score, String value) { - return zAdd(key, score, value, ZAddArgs.none()); - } + Boolean zAdd(String key, double score, String value); /** * Add the {@code value} to a sorted set at {@code key}, or update its {@code score} depending on the given @@ -1130,9 +1128,7 @@ public interface StringRedisConnection extends RedisConnection { * @see Redis Documentation: ZADD * @see RedisZSetCommands#zAdd(byte[], Set) */ - default Long zAdd(String key, Set tuples) { - return zAdd(key, tuples, ZAddArgs.none()); - } + Long zAdd(String key, Set tuples); /** * Add {@code tuples} to a sorted set at {@code key}, or update its {@code score} depending on the given diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveZSetCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveZSetCommands.java index 8696c408f..a46f061d0 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveZSetCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveZSetCommands.java @@ -98,14 +98,15 @@ class LettuceReactiveZSetCommands implements ReactiveZSetCommands { } if (command.isUpsert()) { - args = ZAddArgs.Builder.nx(); + args = args == null ? ZAddArgs.Builder.nx() : args.nx(); } else { - args = ZAddArgs.Builder.xx(); + args = args == null ? ZAddArgs.Builder.xx() : args.xx(); } - if(command.isGt()) { + + if (command.isGt()) { args = args == null ? ZAddArgs.Builder.gt() : args.gt(); } - if(command.isLt()) { + if (command.isLt()) { args = args == null ? ZAddArgs.Builder.lt() : args.lt(); } } @@ -168,7 +169,8 @@ class LettuceReactiveZSetCommands implements ReactiveZSetCommands { Assert.notNull(command.getValue(), "Value must not be null!"); Mono result = ObjectUtils.nullSafeEquals(command.getDirection(), Direction.ASC) - ? cmd.zrank(command.getKey(), command.getValue()) : cmd.zrevrank(command.getKey(), command.getValue()); + ? cmd.zrank(command.getKey(), command.getValue()) + : cmd.zrevrank(command.getKey(), command.getValue()); return result.map(value -> new NumericResponse<>(command, value)); })); @@ -194,24 +196,21 @@ class LettuceReactiveZSetCommands implements ReactiveZSetCommands { if (ObjectUtils.nullSafeEquals(command.getDirection(), Direction.ASC)) { if (command.isWithScores()) { - result = cmd - .zrangeWithScores(command.getKey(), start, stop).map(sc -> new DefaultTuple(getBytes(sc), sc.getScore())); + result = cmd.zrangeWithScores(command.getKey(), start, stop) + .map(sc -> new DefaultTuple(getBytes(sc), sc.getScore())); } else { - result = cmd - .zrange(command.getKey(), start, stop) + result = cmd.zrange(command.getKey(), start, stop) .map(value -> new DefaultTuple(ByteUtils.getBytes(value), Double.NaN)); } } else { if (command.isWithScores()) { - result = cmd - .zrevrangeWithScores(command.getKey(), start, stop) + result = cmd.zrevrangeWithScores(command.getKey(), start, stop) .map(sc -> new DefaultTuple(getBytes(sc), sc.getScore())); } else { - result = cmd - .zrevrange(command.getKey(), start, stop) + result = cmd.zrevrange(command.getKey(), start, stop) .map(value -> new DefaultTuple(ByteUtils.getBytes(value), Double.NaN)); } } @@ -399,8 +398,7 @@ class LettuceReactiveZSetCommands implements ReactiveZSetCommands { LettuceConverters.getLowerBoundIndex(command.getRange()), // LettuceConverters.getUpperBoundIndex(command.getRange())); - return result - .map(value -> new NumericResponse<>(command, value)); + return result.map(value -> new NumericResponse<>(command, value)); })); } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java index 44ff5a037..7376860d8 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java @@ -59,7 +59,8 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(key, "Key must not be null!"); Assert.notNull(value, "Value must not be null!"); - return connection.invoke().from(RedisSortedSetAsyncCommands::zadd, key, LettuceZSetCommands.toZAddArgs(args), score, value) + return connection.invoke() + .from(RedisSortedSetAsyncCommands::zadd, key, LettuceZSetCommands.toZAddArgs(args), score, value) .get(LettuceConverters.longToBoolean()); } @@ -165,15 +166,15 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(range, "Range for ZRANGEBYSCOREWITHSCORES must not be null!"); Assert.notNull(limit, "Limit must not be null!"); - if (limit.isUnlimited()) { - return connection.invoke().fromMany(RedisSortedSetAsyncCommands::zrangebyscoreWithScores, key, - LettuceConverters. toRange(range)).toSet(LettuceConverters::toTuple); - } + if (limit.isUnlimited()) { + return connection.invoke().fromMany(RedisSortedSetAsyncCommands::zrangebyscoreWithScores, key, + LettuceConverters. toRange(range)).toSet(LettuceConverters::toTuple); + } - return connection.invoke() - .fromMany(RedisSortedSetAsyncCommands::zrangebyscoreWithScores, key, - LettuceConverters. toRange(range), LettuceConverters.toLimit(limit)) - .toSet(LettuceConverters::toTuple); + return connection + .invoke().fromMany(RedisSortedSetAsyncCommands::zrangebyscoreWithScores, key, + LettuceConverters. toRange(range), LettuceConverters.toLimit(limit)) + .toSet(LettuceConverters::toTuple); } @@ -214,15 +215,15 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(range, "Range for ZREVRANGEBYSCORE must not be null!"); Assert.notNull(limit, "Limit must not be null!"); - if (limit.isUnlimited()) { + if (limit.isUnlimited()) { - return connection.invoke() - .fromMany(RedisSortedSetAsyncCommands::zrevrangebyscore, key, LettuceConverters. toRange(range)) - .toSet(); - } + return connection.invoke() + .fromMany(RedisSortedSetAsyncCommands::zrevrangebyscore, key, LettuceConverters. toRange(range)) + .toSet(); + } - return connection.invoke().fromMany(RedisSortedSetAsyncCommands::zrevrangebyscore, key, - LettuceConverters. toRange(range), LettuceConverters.toLimit(limit)).toSet(); + return connection.invoke().fromMany(RedisSortedSetAsyncCommands::zrevrangebyscore, key, + LettuceConverters. toRange(range), LettuceConverters.toLimit(limit)).toSet(); } @@ -237,15 +238,15 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(range, "Range for ZREVRANGEBYSCOREWITHSCORES must not be null!"); Assert.notNull(limit, "Limit must not be null!"); - if (limit.isUnlimited()) { - return connection.invoke().fromMany(RedisSortedSetAsyncCommands::zrevrangebyscoreWithScores, key, - LettuceConverters. toRange(range)).toSet(LettuceConverters::toTuple); - } + if (limit.isUnlimited()) { + return connection.invoke().fromMany(RedisSortedSetAsyncCommands::zrevrangebyscoreWithScores, key, + LettuceConverters. toRange(range)).toSet(LettuceConverters::toTuple); + } - return connection.invoke() - .fromMany(RedisSortedSetAsyncCommands::zrevrangebyscoreWithScores, key, - LettuceConverters. toRange(range), LettuceConverters.toLimit(limit)) - .toSet(LettuceConverters::toTuple); + return connection.invoke() + .fromMany(RedisSortedSetAsyncCommands::zrevrangebyscoreWithScores, key, + LettuceConverters. toRange(range), LettuceConverters.toLimit(limit)) + .toSet(LettuceConverters::toTuple); } @@ -580,23 +581,23 @@ class LettuceZSetCommands implements RedisZSetCommands { io.lettuce.core.ZAddArgs target = new io.lettuce.core.ZAddArgs(); - if(!source.isEmpty()) { + if (!source.isEmpty()) { return target; } - if(source.contains(Flag.XX)) { + if (source.contains(Flag.XX)) { target.xx(); } - if(source.contains(Flag.NX)) { + if (source.contains(Flag.NX)) { target.nx(); } - if(source.contains(Flag.GT)) { + if (source.contains(Flag.GT)) { target.gt(); } - if(source.contains(Flag.LT)) { + if (source.contains(Flag.LT)) { target.lt(); } - if(source.contains(Flag.CH)) { + if (source.contains(Flag.CH)) { target.ch(); } return target; diff --git a/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java b/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java index 5c8895324..79ae492d8 100644 --- a/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java +++ b/src/main/java/org/springframework/data/redis/core/DefaultZSetOperations.java @@ -50,7 +50,10 @@ class DefaultZSetOperations extends AbstractOperations implements ZS */ @Override public Boolean add(K key, V value, double score) { - return add(key, value, score, ZAddArgs.none()); + + byte[] rawKey = rawKey(key); + byte[] rawValue = rawValue(value); + return execute(connection -> connection.zAdd(rawKey, score, rawValue), true); } /* @@ -83,7 +86,10 @@ class DefaultZSetOperations extends AbstractOperations implements ZS */ @Override public Long add(K key, Set> tuples) { - return add(key, tuples, ZAddArgs.none()); + + byte[] rawKey = rawKey(key); + Set rawValues = rawTupleValues(tuples); + return execute(connection -> connection.zAdd(rawKey, rawValues), true); } /*