diff --git a/src/main/java/org/redisson/api/RSetReactive.java b/src/main/java/org/redisson/api/RSetReactive.java index c9e29f226..b1a155e99 100644 --- a/src/main/java/org/redisson/api/RSetReactive.java +++ b/src/main/java/org/redisson/api/RSetReactive.java @@ -71,4 +71,23 @@ public interface RSetReactive extends RCollectionReactive { * @return */ Publisher> readUnion(String... names); + + /** + * Diff sets specified by name and write to current set. + * If current set already exists, it is overwritten. + * + * @param names + * @return + */ + Publisher diff(String... names); + + /** + * Intersection sets specified by name and write to current set. + * If current set already exists, it is overwritten. + * + * @param names + * @return + */ + Publisher intersection(String... names); + } diff --git a/src/main/java/org/redisson/client/protocol/RedisCommands.java b/src/main/java/org/redisson/client/protocol/RedisCommands.java index 7eb1dd8f3..76328187a 100644 --- a/src/main/java/org/redisson/client/protocol/RedisCommands.java +++ b/src/main/java/org/redisson/client/protocol/RedisCommands.java @@ -142,6 +142,8 @@ public interface RedisCommands { RedisStrictCommand SDIFFSTORE_INT = new RedisStrictCommand("SDIFFSTORE", new IntegerReplayConvertor()); RedisStrictCommand SINTERSTORE_INT = new RedisStrictCommand("SINTERSTORE", new IntegerReplayConvertor()); RedisStrictCommand SUNIONSTORE = new RedisStrictCommand("SUNIONSTORE"); + RedisStrictCommand SINTERSTORE = new RedisStrictCommand("SINTERSTORE"); + RedisStrictCommand SDIFFSTORE = new RedisStrictCommand("SDIFFSTORE"); RedisCommand> SUNION = new RedisCommand>("SUNION", new ObjectSetReplayDecoder()); RedisCommand> SDIFF = new RedisCommand>("SDIFF", new ObjectSetReplayDecoder()); RedisCommand> SINTER = new RedisCommand>("SINTER", new ObjectSetReplayDecoder()); diff --git a/src/main/java/org/redisson/reactive/RedissonSetReactive.java b/src/main/java/org/redisson/reactive/RedissonSetReactive.java index 586b0a495..9f4ce794a 100644 --- a/src/main/java/org/redisson/reactive/RedissonSetReactive.java +++ b/src/main/java/org/redisson/reactive/RedissonSetReactive.java @@ -118,6 +118,22 @@ public class RedissonSetReactive extends RedissonExpirableReactive implements return reactive(instance.removeAllAsync(c)); } + @Override + public Publisher intersection(String... names) { + List args = new ArrayList(names.length + 1); + args.add(getName()); + args.addAll(Arrays.asList(names)); + return commandExecutor.writeReactive(getName(), codec, RedisCommands.SINTERSTORE, args.toArray()); + } + + @Override + public Publisher diff(String... names) { + List args = new ArrayList(names.length + 1); + args.add(getName()); + args.addAll(Arrays.asList(names)); + return commandExecutor.writeReactive(getName(), codec, RedisCommands.SDIFFSTORE, args.toArray()); + } + @Override public Publisher union(String... names) { List args = new ArrayList(names.length + 1);