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); //