CacheSource增加zrank方法

This commit is contained in:
redkale
2023-06-17 11:49:36 +08:00
parent 197d76fd3c
commit 4b329296f2
2 changed files with 58 additions and 5 deletions

View File

@@ -1355,6 +1355,52 @@ public final class CacheMemorySource extends AbstractCacheSource {
}, getExecutor());
}
@Override
public CompletableFuture<Long> 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<CacheScoredValue.NumberScoredValue> 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<Long> 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<CacheScoredValue.NumberScoredValue> 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<Long> zremAsync(String key, String... members) {
return supplyAsync(() -> {

View File

@@ -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<Boolean> isOpenAsync();
@@ -1389,11 +1397,10 @@ public interface CacheSource extends Resourcable {
//
//
// public <T> CompletableFuture<Long> zrankAsync(String key, String member, boolean withScore);
//
// default <T> CompletableFuture<Long> zrankAsync(String key, String member) {
// return zrankAsync(key, member, false);
// }
public CompletableFuture<Long> zrankAsync(String key, String member);
public CompletableFuture<Long> zrevrankAsync(String key, String member);
//
// public <T> CompletableFuture<Set<T>> zscanAsync(String key, Type componentType, AtomicLong cursor, int limit, String pattern);
//