diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index eb887a652..d8f5ea505 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -415,6 +415,24 @@ public final class CacheMemorySource extends AbstractCacheSource { }, getExecutor()); } + @Override + public CompletableFuture hstrlenAsync(final String key, final String field) { + return supplyAsync(() -> { + if (key == null || field == null) { + return 0L; + } + CacheEntry entry = container.get(key); + if (entry == null || entry.isExpired() || entry.mapValue == null) { + return 0L; + } + Object obj = entry.mapValue.get(field); + if (obj == null) { + return 0L; + } + return (long) obj.toString().length(); + }, getExecutor()); + } + //----------- hxxx -------------- @Override public CompletableFuture existsAsync(String key) { diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index d7744eb78..8864ac22e 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -373,6 +373,10 @@ public interface CacheSource extends Resourcable { return hsetnx(key, field, Long.class, value); } + default long hstrlen(String key, String field) { + return hstrlenAsync(key, field).join(); + } + default Map hgetall(String key, Type type) { return (Map) hgetallAsync(key, type).join(); } @@ -1032,6 +1036,8 @@ public interface CacheSource extends Resourcable { return hsetnxAsync(key, field, Long.class, value); } + public CompletableFuture hstrlenAsync(String key, String field); + public CompletableFuture> hgetallAsync(String key, Type type); default CompletableFuture> hgetallStringAsync(String key) {