From 4b329296f28f3d92d2c8e4df5439adf4da9de755 Mon Sep 17 00:00:00 2001 From: redkale Date: Sat, 17 Jun 2023 11:49:36 +0800 Subject: [PATCH] =?UTF-8?q?CacheSource=E5=A2=9E=E5=8A=A0zrank=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 | 46 +++++++++++++++++++ .../java/org/redkale/source/CacheSource.java | 17 +++++-- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index acbc36943..b53a7a914 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -1355,6 +1355,52 @@ public final class CacheMemorySource extends AbstractCacheSource { }, getExecutor()); } + @Override + public CompletableFuture zrankAsync(String key, String member) { + return supplyAsync(() -> { + if (key == null) { + return null; + } + CacheEntry entry = container.get(key); + if (entry == null || !entry.isSetCacheType() || entry.csetValue == null) { + return null; + } + List list = new ArrayList<>(entry.csetValue); + Collections.sort(list); + long c = 0; + for (CacheScoredValue.NumberScoredValue v : list) { + if (Objects.equals(v.getValue(), member)) { + return c; + } + c++; + } + return null; + }, getExecutor()); + } + + @Override + public CompletableFuture zrevrankAsync(String key, String member) { + return supplyAsync(() -> { + if (key == null) { + return null; + } + CacheEntry entry = container.get(key); + if (entry == null || !entry.isSetCacheType() || entry.csetValue == null) { + return null; + } + List list = new ArrayList<>(entry.csetValue); + Collections.sort(list, Collections.reverseOrder()); + long c = 0; + for (CacheScoredValue.NumberScoredValue v : list) { + if (Objects.equals(v.getValue(), member)) { + return c; + } + c++; + } + return null; + }, getExecutor()); + } + @Override public CompletableFuture zremAsync(String key, String... members) { return supplyAsync(() -> { diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index a476b1583..e4057871d 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -780,6 +780,14 @@ public interface CacheSource extends Resourcable { return zcardAsync(key).join(); } + default Long zrank(String key, String member) { + return zrankAsync(key, member).join(); + } + + default Long zrevrank(String key, String member) { + return zrevrankAsync(key, member).join(); + } + //---------------------- CompletableFuture 异步版 --------------------------------- public CompletableFuture isOpenAsync(); @@ -1389,11 +1397,10 @@ public interface CacheSource extends Resourcable { // // -// public CompletableFuture zrankAsync(String key, String member, boolean withScore); -// -// default CompletableFuture zrankAsync(String key, String member) { -// return zrankAsync(key, member, false); -// } + public CompletableFuture zrankAsync(String key, String member); + + public CompletableFuture zrevrankAsync(String key, String member); + // // public CompletableFuture> zscanAsync(String key, Type componentType, AtomicLong cursor, int limit, String pattern); //