From 936f50659b441f9fec2621bfb20c4bc6d1452fce Mon Sep 17 00:00:00 2001 From: redkale Date: Mon, 26 Jun 2023 08:16:27 +0800 Subject: [PATCH] =?UTF-8?q?CacheSource=E5=A2=9E=E5=8A=A0hstrlen=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 | 18 ++++++++++++++++++ .../java/org/redkale/source/CacheSource.java | 6 ++++++ 2 files changed, 24 insertions(+) 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) {