From acee7cdfb0304b4639bb39bf7306fc6e8689b64f Mon Sep 17 00:00:00 2001 From: redkale Date: Mon, 26 Jun 2023 15:30:31 +0800 Subject: [PATCH] =?UTF-8?q?CacheSource=E5=A2=9E=E5=8A=A0sunion=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/source/CacheMemorySource.java | 34 +++++++++++++++++++ .../java/org/redkale/source/CacheSource.java | 28 +++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index 8b6e9839c..4049dea1a 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -958,6 +958,40 @@ public final class CacheMemorySource extends AbstractCacheSource { }, getExecutor()); } + @Override + public CompletableFuture> sunionAsync(final String key, final Type componentType, final String... key2s) { + return supplyAsync(() -> { + Set rs = new HashSet<>(); + CacheEntry entry = container.get(key); + if (entry == null || entry.csetValue == null) { + return rs; + } + rs.addAll(entry.csetValue); + for (String k : key2s) { + CacheEntry en2 = container.get(k); + if (en2 != null && en2.csetValue != null) { + rs.addAll(en2.csetValue); + } + } + return rs; + }, getExecutor()); + } + + @Override + public CompletableFuture sunionstoreAsync(final String key, final String srcKey, final String... srcKey2s) { + return supplyAsync(() -> { + Set rs = sunion(srcKey, Object.class, srcKey2s); + if (container.containsKey(key)) { + Set set = container.get(srcKey).csetValue; + set.clear(); + set.addAll(rs); + } else { + appendSetItem(CacheEntryType.SET_OBJECT, key, rs); + } + return (long) rs.size(); + }, getExecutor()); + } + @Override public CompletableFuture sinterstoreAsync(final String key, final String srcKey, final String... srcKey2s) { return supplyAsync(() -> { diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index 0694aaa7a..9a8871d51 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -623,6 +623,22 @@ public interface CacheSource extends Resourcable { return sinterstoreAsync(key, srcKey, srcKey2s).join(); } + default Set sunion(String key, Type componentType, String... key2s) { + return (Set) sunionAsync(key, componentType, key2s).join(); + } + + default Set sunionString(String key, String... key2s) { + return sunion(key, String.class, key2s); + } + + default Set sunionLong(String key, String... key2s) { + return sunion(key, Long.class, key2s); + } + + default long sunionstore(String key, String srcKey, String... srcKey2s) { + return sunionstoreAsync(key, srcKey, srcKey2s).join(); + } + default long scard(String key) { return scardAsync(key).join(); } @@ -1316,6 +1332,18 @@ public interface CacheSource extends Resourcable { public CompletableFuture sinterstoreAsync(String key, String srcKey, String... srcKey2s); + public CompletableFuture> sunionAsync(String key, Type componentType, String... key2s); + + default CompletableFuture> sunionStringAsync(String key, String... key2s) { + return sunionAsync(key, String.class, key2s); + } + + default CompletableFuture> sunionLongAsync(String key, String... key2s) { + return sunionAsync(key, Long.class, key2s); + } + + public CompletableFuture sunionstoreAsync(String key, String srcKey, String... srcKey2s); + public CompletableFuture scardAsync(String key); public CompletableFuture> smembersAsync(String key, Type componentType);