diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisListCommands.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisListCommands.java index 75b0520b8..deee6298e 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisListCommands.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisListCommands.java @@ -42,9 +42,9 @@ public interface RedisListCommands { Long lLen(byte[] key); - List lRange(byte[] key, long start, long end); + List lRange(byte[] key, long begin, long end); - void lTrim(byte[] key, long start, long end); + void lTrim(byte[] key, long begin, long end); byte[] lIndex(byte[] key, long index); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java index ab81f31d3..ea96dfde6 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java @@ -52,9 +52,9 @@ public interface RedisStringCommands { Long append(byte[] key, byte[] value); - byte[] getRange(byte[] key, int start, int end); + byte[] getRange(byte[] key, int begin, int end); - void setRange(byte[] key, int start, int end); + void setRange(byte[] key, int begin, int end); Boolean getBit(byte[] key, long offset); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisZSetCommands.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisZSetCommands.java index 7ede85506..eacc7de72 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisZSetCommands.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisZSetCommands.java @@ -52,13 +52,13 @@ public interface RedisZSetCommands { Long zRevRank(byte[] key, byte[] value); - Set zRange(byte[] key, long start, long end); + Set zRange(byte[] key, long begin, long end); - Set zRangeWithScore(byte[] key, long start, long end); + Set zRangeWithScore(byte[] key, long begin, long end); - Set zRevRange(byte[] key, long start, long end); + Set zRevRange(byte[] key, long begin, long end); - Set zRevRangeWithScore(byte[] key, long start, long end); + Set zRevRangeWithScore(byte[] key, long begin, long end); Set zRangeByScore(byte[] key, double min, double max); @@ -74,7 +74,7 @@ public interface RedisZSetCommands { Double zScore(byte[] key, byte[] value); - Long zRemRange(byte[] key, long start, long end); + Long zRemRange(byte[] key, long begin, long end); Long zRemRangeByScore(byte[] key, double min, double max); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java index 7011c7257..2da61f806 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java @@ -28,17 +28,29 @@ public interface BoundSetOperations extends KeyBound { RedisOperations getOperations(); + Set diff(K key); + Set diff(Collection keys); - void diffAndStore(K destKey, Collection keys); + void diffAndStore(K key, K destKey); + + void diffAndStore(Collection keys, K destKey); + + Set intersect(K key); Set intersect(Collection keys); - void intersectAndStore(K destKey, Collection keys); + void intersectAndStore(K key, K destKey); + + void intersectAndStore(Collection keys, K destKey); + + Set union(K key); Set union(Collection keys); - void unionAndStore(K destKey, Collection keys); + void unionAndStore(K key, K destKey); + + void unionAndStore(Collection keys, K destKey); Boolean add(V value); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java index 87f992bfa..37222cc93 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java @@ -29,7 +29,9 @@ public interface BoundZSetOperations extends KeyBound { RedisOperations getOperations(); - void intersectAndStore(K destKey, Collection keys); + void intersectAndStore(K otherKey, K destKey); + + void intersectAndStore(Collection otherKeys, K destKey); Set range(long start, long end); @@ -41,7 +43,9 @@ public interface BoundZSetOperations extends KeyBound { void removeRangeByScore(double min, double max); - void unionAndStore(K destKey, Collection keys); + void unionAndStore(K otherKey, K destKey); + + void unionAndStore(Collection otherKeys, K destKey); Boolean add(V value, double score); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java index ffae21d6f..e92e21bd2 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java @@ -45,14 +45,25 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun return ops.add(getKey(), value); } + @Override + public Set diff(K key) { + return ops.difference(getKey(), key); + } + @Override public Set diff(Collection keys) { return ops.difference(getKey(), keys); } + @Override - public void diffAndStore(K destKey, Collection keys) { - ops.differenceAndStore(getKey(), destKey, keys); + public void diffAndStore(K key, K destKey) { + ops.differenceAndStore(getKey(), key, destKey); + } + + @Override + public void diffAndStore(Collection keys, K destKey) { + ops.differenceAndStore(getKey(), keys, destKey); } @Override @@ -60,14 +71,24 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun return ops.getOperations(); } + @Override + public Set intersect(K key) { + return ops.intersect(getKey(), key); + } + @Override public Set intersect(Collection keys) { return ops.intersect(getKey(), keys); } @Override - public void intersectAndStore(K destKey, Collection keys) { - ops.intersectAndStore(getKey(), destKey, keys); + public void intersectAndStore(K key, K destKey) { + ops.intersectAndStore(getKey(), key, destKey); + } + + @Override + public void intersectAndStore(Collection keys, K destKey) { + ops.intersectAndStore(getKey(), keys, destKey); } @Override @@ -82,7 +103,7 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun @Override public Boolean move(K destKey, V value) { - return ops.move(getKey(), destKey, value); + return ops.move(getKey(), value, destKey); } @Override @@ -105,13 +126,24 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun return ops.size(getKey()); } + + @Override + public Set union(K key) { + return ops.union(getKey(), key); + } + @Override public Set union(Collection keys) { return ops.union(getKey(), keys); } @Override - public void unionAndStore(K destKey, Collection keys) { - ops.unionAndStore(getKey(), destKey, keys); + public void unionAndStore(K key, K destKey) { + ops.unionAndStore(getKey(), key, destKey); + } + + @Override + public void unionAndStore(Collection keys, K destKey) { + ops.unionAndStore(getKey(), keys, destKey); } } \ No newline at end of file diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java index 00443f515..343c1d72b 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java @@ -55,8 +55,13 @@ class DefaultBoundZSetOperations extends DefaultKeyBound implements Bou } @Override - public void intersectAndStore(K destKey, Collection keys) { - ops.intersectAndStore(getKey(), destKey, keys); + public void intersectAndStore(K destKey, K otherKey) { + ops.intersectAndStore(getKey(), otherKey, destKey); + } + + @Override + public void intersectAndStore(Collection otherKeys, K destKey) { + ops.intersectAndStore(getKey(), otherKeys, destKey); } @Override @@ -115,7 +120,12 @@ class DefaultBoundZSetOperations extends DefaultKeyBound implements Bou } @Override - public void unionAndStore(K destKey, Collection keys) { - ops.unionAndStore(getKey(), destKey, keys); + public void unionAndStore(K otherKey, K destKey) { + ops.unionAndStore(getKey(), otherKey, destKey); + } + + @Override + public void unionAndStore(Collection otherKeys, K destKey) { + ops.unionAndStore(getKey(), otherKeys, destKey); } } \ 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 df89bcc03..aad80f6c0 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 @@ -426,6 +426,15 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return rawKeys; } + private byte[][] rawKeys(K key, K otherKey) { + final byte[][] rawKeys = new byte[2][]; + + + rawKeys[0] = rawKey(key); + rawKeys[1] = rawKey(key); + return rawKeys; + } + private byte[][] rawKeys(K key, Collection keys) { final byte[][] rawKeys = new byte[keys.size() + 1][]; @@ -1327,8 +1336,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public Set difference(final K key, final Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public Set difference(K key, K otherKey) { + return difference(key, Collections.singleton(otherKey)); + } + + @Override + public Set difference(final K key, final Collection otherKeys) { + final byte[][] rawKeys = rawKeys(key, otherKeys); Set rawValues = execute(new RedisCallback>() { @Override public Set doInRedis(RedisConnection connection) { @@ -1340,8 +1354,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public void differenceAndStore(final K key, K destKey, final Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public void differenceAndStore(K key, K otherKey, K destKey) { + differenceAndStore(key, Collections.singleton(otherKey), destKey); + } + + @Override + public void differenceAndStore(final K key, final Collection otherKeys, K destKey) { + final byte[][] rawKeys = rawKeys(key, otherKeys); final byte[] rawDestKey = rawKey(destKey); execute(new RedisCallback() { @Override @@ -1358,8 +1377,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public Set intersect(K key, Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public Set intersect(K key, K otherKey) { + return intersect(key, Collections.singleton(otherKey)); + } + + @Override + public Set intersect(K key, Collection otherKeys) { + final byte[][] rawKeys = rawKeys(key, otherKeys); Set rawValues = execute(new RedisCallback>() { @Override public Set doInRedis(RedisConnection connection) { @@ -1371,8 +1395,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public void intersectAndStore(K key, K destKey, Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public void intersectAndStore(K key, K otherKey, K destKey) { + intersectAndStore(key, Collections.singleton(otherKey), destKey); + } + + @Override + public void intersectAndStore(K key, Collection otherKeys, K destKey) { + final byte[][] rawKeys = rawKeys(key, otherKeys); final byte[] rawDestKey = rawKey(destKey); execute(new RedisCallback() { @Override @@ -1409,7 +1438,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public Boolean move(K key, K destKey, V value) { + public Boolean move(K key, V value, K destKey) { final byte[] rawKey = rawKey(key); final byte[] rawDestKey = rawKey(destKey); final byte[] rawValue = rawValue(value); @@ -1467,8 +1496,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public Set union(K key, Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public Set union(K key, K otherKey) { + return union(key, Collections.singleton(otherKey)); + } + + @Override + public Set union(K key, Collection otherKeys) { + final byte[][] rawKeys = rawKeys(key, otherKeys); Set rawValues = execute(new RedisCallback>() { @Override public Set doInRedis(RedisConnection connection) { @@ -1480,8 +1514,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public void unionAndStore(K key, K destKey, Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public void unionAndStore(K key, K otherKey, K destKey) { + unionAndStore(key, Collections.singleton(otherKey), destKey); + } + + @Override + public void unionAndStore(K key, Collection otherKeys, K destKey) { + final byte[][] rawKeys = rawKeys(key, otherKeys); final byte[] rawDestKey = rawKey(destKey); execute(new RedisCallback() { @Override @@ -1540,9 +1579,15 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation return RedisTemplate.this; } + @Override - public void intersectAndStore(K key, K destKey, Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public void intersectAndStore(K key, K otherKey, K destKey) { + intersectAndStore(key, Collections.singleton(otherKey), destKey); + } + + @Override + public void intersectAndStore(K key, Collection otherKeys, K destKey) { + final byte[][] rawKeys = rawKeys(key, otherKeys); final byte[] rawDestKey = rawKey(destKey); execute(new RedisCallback() { @Override @@ -1698,8 +1743,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation } @Override - public void unionAndStore(K key, K destKey, Collection keys) { - final byte[][] rawKeys = rawKeys(key, keys); + public void unionAndStore(K key, K otherKey, K destKey) { + unionAndStore(key, Collections.singleton(otherKey), destKey); + } + + @Override + public void unionAndStore(K key, Collection otherKeys, K destKey) { + final byte[][] rawKeys = rawKeys(key, otherKeys); final byte[] rawDestKey = rawKey(destKey); execute(new RedisCallback() { @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java index 1c852cd39..a8145f30c 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/SetOperations.java @@ -26,17 +26,29 @@ import java.util.Set; */ public interface SetOperations { - Set difference(K key, Collection keys); + Set difference(K key, K otherKey); - void differenceAndStore(K key, K destKey, Collection keys); + Set difference(K key, Collection otherKeys); - Set intersect(K key, Collection keys); + void differenceAndStore(K key, K otherKey, K destKey); - void intersectAndStore(K key, K destKey, Collection keys); + void differenceAndStore(K key, Collection otherKeys, K destKey); - Set union(K key, Collection keys); + Set intersect(K key, K otherKey); - void unionAndStore(K key, K destKey, Collection keys); + Set intersect(K key, Collection otherKeys); + + void intersectAndStore(K key, K otherKey, K destKey); + + void intersectAndStore(K key, Collection otherKeys, K destKey); + + Set union(K key, K otherKey); + + Set union(K key, Collection otherKeys); + + void unionAndStore(K key, K otherKey, K destKey); + + void unionAndStore(K key, Collection otherKeys, K destKey); Boolean add(K key, V value); @@ -44,7 +56,7 @@ public interface SetOperations { Set members(K key); - Boolean move(K key, K destKey, V value); + Boolean move(K key, V value, K destKey); V randomMember(K key); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java index 08f0744a3..221138af9 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ZSetOperations.java @@ -26,9 +26,13 @@ import java.util.Set; */ public interface ZSetOperations { - void intersectAndStore(K key, K destKey, Collection keys); + void intersectAndStore(K key, K otherKey, K destKey); - void unionAndStore(K key, K destKey, Collection keys); + void intersectAndStore(K key, Collection otherKeys, K destKey); + + void unionAndStore(K key, K otherKey, K destKey); + + void unionAndStore(K key, Collection otherKeys, K destKey); Set range(K key, long start, long end); diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/BasicNumberToStringSerializer.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/BasicNumberToStringSerializer.java new file mode 100644 index 000000000..e7a493879 --- /dev/null +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/serializer/BasicNumberToStringSerializer.java @@ -0,0 +1,68 @@ +/* + * 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.serializer; + +import java.lang.reflect.Constructor; +import java.nio.charset.Charset; + +import org.springframework.beans.BeanUtils; +import org.springframework.util.Assert; + +/** + * Simple toString() serializer for the core (lang) numberic JDK types. + * + * @see String#valueOf(Object) + * @see Long#valueOf(String) + * @author Costin Leau + */ +public class BasicNumberToStringSerializer implements RedisSerializer { + + private final Charset charset; + private final Constructor ctor; + + public BasicNumberToStringSerializer(Class type) { + this(type, Charset.forName("UTF8")); + } + + public BasicNumberToStringSerializer(Class type, Charset charset) { + Assert.notNull(type); + this.charset = charset; + + if (!(Byte.class.isAssignableFrom(type) || Short.class.isAssignableFrom(type) + || Long.class.isAssignableFrom(type) || Integer.class.isAssignableFrom(type) + || Float.class.isAssignableFrom(type) || Double.class.isAssignableFrom(type))) { + throw new IllegalArgumentException("Type " + type + " not supported"); + } + + try { + ctor = type.getConstructor(String.class); + } catch (Exception ex) { + throw new IllegalArgumentException("Cannot find suitable constructor for " + type); + } + } + + @Override + public T deserialize(byte[] bytes) { + String string = new String(bytes, charset); + return BeanUtils.instantiateClass(ctor, string); + } + + @Override + public byte[] serialize(T object) { + String string = String.valueOf(object); + return string.getBytes(charset); + } +} \ No newline at end of file diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java index afac4fa7e..cae600c76 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java @@ -24,6 +24,8 @@ import org.springframework.data.keyvalue.redis.core.RedisOperations; import org.springframework.data.keyvalue.redis.core.RedisTemplate; import org.springframework.data.keyvalue.redis.core.SessionCallback; import org.springframework.data.keyvalue.redis.core.ValueOperations; +import org.springframework.data.keyvalue.redis.serializer.BasicNumberToStringSerializer; +import org.springframework.data.keyvalue.redis.serializer.StringRedisSerializer; /** * Atomic integer backed by Redis. @@ -47,6 +49,8 @@ public class RedisAtomicInteger extends Number implements Serializable, KeyBound */ public RedisAtomicInteger(String redisCounter, RedisConnectionFactory factory) { RedisTemplate redisTemplate = new RedisTemplate(factory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new BasicNumberToStringSerializer(Integer.class)); redisTemplate.setExposeConnection(true); this.key = redisCounter; this.generalOps = redisTemplate; diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java index c3005a6da..001ee19ba 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java @@ -24,6 +24,8 @@ import org.springframework.data.keyvalue.redis.core.RedisOperations; import org.springframework.data.keyvalue.redis.core.RedisTemplate; import org.springframework.data.keyvalue.redis.core.SessionCallback; import org.springframework.data.keyvalue.redis.core.ValueOperations; +import org.springframework.data.keyvalue.redis.serializer.BasicNumberToStringSerializer; +import org.springframework.data.keyvalue.redis.serializer.StringRedisSerializer; /** * Atomic long backed by Redis. @@ -47,6 +49,8 @@ public class RedisAtomicLong extends Number implements Serializable, KeyBound redisTemplate = new RedisTemplate(factory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new BasicNumberToStringSerializer(Long.class)); redisTemplate.setExposeConnection(true); this.key = redisCounter; this.generalOps = redisTemplate; diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java index 43b4a5e67..50a69ea11 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisSet.java @@ -66,36 +66,71 @@ public class DefaultRedisSet extends AbstractRedisCollection implements Re this.boundSetOps = boundOps; } + + @Override + public Set diff(RedisSet set) { + return boundSetOps.diff(set.getKey()); + } + @Override public Set diff(Collection> sets) { return boundSetOps.diff(CollectionUtils.extractKeys(sets)); } + @Override - public RedisSet diffAndStore(String destKey, Collection> sets) { - boundSetOps.diffAndStore(destKey, CollectionUtils.extractKeys(sets)); + public RedisSet diffAndStore(RedisSet set, String destKey) { + boundSetOps.diffAndStore(set.getKey(), destKey); return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); } + @Override + public RedisSet diffAndStore(Collection> sets, String destKey) { + boundSetOps.diffAndStore(CollectionUtils.extractKeys(sets), destKey); + return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); + } + + @Override + public Set intersect(RedisSet set) { + return boundSetOps.intersect(set.getKey()); + } + @Override public Set intersect(Collection> sets) { return boundSetOps.intersect(CollectionUtils.extractKeys(sets)); } @Override - public RedisSet intersectAndStore(String destKey, Collection> sets) { - boundSetOps.intersectAndStore(destKey, CollectionUtils.extractKeys(sets)); + public RedisSet intersectAndStore(RedisSet set, String destKey) { + boundSetOps.intersectAndStore(set.getKey(), destKey); return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); } + @Override + public RedisSet intersectAndStore(Collection> sets, String destKey) { + boundSetOps.intersectAndStore(CollectionUtils.extractKeys(sets), destKey); + return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); + } + + @Override + public Set union(RedisSet set) { + return boundSetOps.union(set.getKey()); + } + @Override public Set union(Collection> sets) { return boundSetOps.union(CollectionUtils.extractKeys(sets)); } @Override - public RedisSet unionAndStore(String destKey, Collection> sets) { - boundSetOps.unionAndStore(destKey, CollectionUtils.extractKeys(sets)); + public RedisSet unionAndStore(RedisSet set, String destKey) { + boundSetOps.unionAndStore(set.getKey(), destKey); + return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); + } + + @Override + public RedisSet unionAndStore(Collection> sets, String destKey) { + boundSetOps.unionAndStore(CollectionUtils.extractKeys(sets), destKey); return new DefaultRedisSet(boundSetOps.getOperations().boundSetOps(destKey)); } @@ -109,7 +144,7 @@ public class DefaultRedisSet extends AbstractRedisCollection implements Re // intersect the set with a non existing one // TODO: find a safer way to clean the set String randomKey = UUID.randomUUID().toString(); - boundSetOps.intersectAndStore(getKey(), Collections.singleton(randomKey)); + boundSetOps.intersectAndStore(Collections.singleton(randomKey), getKey()); } @Override diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java index f425c3b03..d3ee04765 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/DefaultRedisZSet.java @@ -91,8 +91,14 @@ public class DefaultRedisZSet extends AbstractRedisCollection implements R } @Override - public RedisZSet intersectAndStore(String destKey, Collection> sets) { - boundZSetOps.intersectAndStore(destKey, CollectionUtils.extractKeys(sets)); + public RedisZSet intersectAndStore(RedisZSet set, String destKey) { + boundZSetOps.intersectAndStore(set.getKey(), destKey); + return new DefaultRedisZSet(boundZSetOps.getOperations().boundZSetOps(destKey), getDefaultScore()); + } + + @Override + public RedisZSet intersectAndStore(Collection> sets, String destKey) { + boundZSetOps.intersectAndStore(CollectionUtils.extractKeys(sets), destKey); return new DefaultRedisZSet(boundZSetOps.getOperations().boundZSetOps(destKey), getDefaultScore()); } @@ -124,8 +130,14 @@ public class DefaultRedisZSet extends AbstractRedisCollection implements R } @Override - public RedisZSet unionAndStore(String destKey, Collection> sets) { - boundZSetOps.unionAndStore(destKey, CollectionUtils.extractKeys(sets)); + public RedisZSet unionAndStore(RedisZSet set, String destKey) { + boundZSetOps.unionAndStore(set.getKey(), destKey); + return new DefaultRedisZSet(boundZSetOps.getOperations().boundZSetOps(destKey), getDefaultScore()); + } + + @Override + public RedisZSet unionAndStore(Collection> sets, String destKey) { + boundZSetOps.unionAndStore(CollectionUtils.extractKeys(sets), destKey); return new DefaultRedisZSet(boundZSetOps.getOperations().boundZSetOps(destKey), getDefaultScore()); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java index 45d697576..846454fb5 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisList.java @@ -28,7 +28,7 @@ import java.util.concurrent.BlockingDeque; */ public interface RedisList extends RedisCollection, List, BlockingDeque { - List range(long start, long end); + List range(long begin, long end); - RedisList trim(int start, int end); + RedisList trim(int begin, int end); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java index 02b2001fc..78cde802b 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisSet.java @@ -26,15 +26,27 @@ import java.util.Set; */ public interface RedisSet extends RedisCollection, Set { + Set intersect(RedisSet set); + Set intersect(Collection> sets); + Set union(RedisSet set); + Set union(Collection> sets); + Set diff(RedisSet set); + Set diff(Collection> sets); - RedisSet intersectAndStore(String destKey, Collection> sets); + RedisSet intersectAndStore(RedisSet set, String destKey); - RedisSet unionAndStore(String destKey, Collection> sets); + RedisSet intersectAndStore(Collection> sets, String destKey); - RedisSet diffAndStore(String destKey, Collection> sets); + RedisSet unionAndStore(RedisSet set, String destKey); + + RedisSet unionAndStore(Collection> sets, String destKey); + + RedisSet diffAndStore(RedisSet set, String destKey); + + RedisSet diffAndStore(Collection> sets, String destKey); } diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java index fde9160a2..0d6c24221 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/collections/RedisZSet.java @@ -30,9 +30,13 @@ import java.util.SortedSet; */ public interface RedisZSet extends RedisCollection, Set { - RedisZSet intersectAndStore(String destKey, Collection> sets); + RedisZSet intersectAndStore(RedisZSet set, String destKey); - RedisZSet unionAndStore(String destKey, Collection> sets); + RedisZSet intersectAndStore(Collection> sets, String destKey); + + RedisZSet unionAndStore(RedisZSet set, String destKey); + + RedisZSet unionAndStore(Collection> sets, String destKey); Set range(long start, long end); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java index f66f80683..b06c1b139 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisSetTests.java @@ -102,7 +102,7 @@ public abstract class AbstractRedisSetTests extends AbstractRedisCollectionTe diffSet2.add(t4); String resultName = "test:set:diff:result:1"; - RedisSet diff = set.diffAndStore(resultName, Arrays.asList(diffSet1, diffSet2)); + RedisSet diff = set.diffAndStore(Arrays.asList(diffSet1, diffSet2), resultName); assertEquals(1, diff.size()); assertThat(diff, hasItem(t1)); @@ -153,7 +153,7 @@ public abstract class AbstractRedisSetTests extends AbstractRedisCollectionTe intSet2.add(t3); String resultName = "test:set:intersect:result:1"; - RedisSet inter = set.intersectAndStore(resultName, Arrays.asList(intSet1, intSet2)); + RedisSet inter = set.intersectAndStore(Arrays.asList(intSet1, intSet2), resultName); assertEquals(1, inter.size()); assertThat(inter, hasItem(t2)); assertEquals(resultName, inter.getKey()); @@ -199,7 +199,7 @@ public abstract class AbstractRedisSetTests extends AbstractRedisCollectionTe unionSet2.add(t3); String resultName = "test:set:union:result:1"; - RedisSet union = set.unionAndStore(resultName, Arrays.asList(unionSet1, unionSet2)); + RedisSet union = set.unionAndStore(Arrays.asList(unionSet1, unionSet2), resultName); assertEquals(4, union.size()); assertThat(union, hasItems(t1, t2, t3, t4)); assertEquals(resultName, union.getKey()); diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java index 8e5465ee1..9aae0fde4 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/support/collections/AbstractRedisZSetTest.java @@ -207,7 +207,7 @@ public abstract class AbstractRedisZSetTest extends AbstractRedisCollectionTe interSet2.add(t3, 3); String resultName = "test:zset:inter:result:1"; - RedisZSet inter = zSet.intersectAndStore(resultName, Arrays.asList(interSet1, interSet2)); + RedisZSet inter = zSet.intersectAndStore(Arrays.asList(interSet1, interSet2), resultName); assertEquals(1, inter.size()); assertThat(inter, hasItem(t2)); @@ -327,7 +327,7 @@ public abstract class AbstractRedisZSetTest extends AbstractRedisCollectionTe unionSet2.add(t3, 6); String resultName = "test:zset:union:result:1"; - RedisZSet union = zSet.unionAndStore(resultName, Arrays.asList(unionSet1, unionSet2)); + RedisZSet union = zSet.unionAndStore(Arrays.asList(unionSet1, unionSet2), resultName); assertEquals(4, union.size()); assertThat(union, hasItems(t1, t2, t3, t4)); assertEquals(resultName, union.getKey());