From 29922507455ebfcb870908391d6bfb2bb981001c Mon Sep 17 00:00:00 2001 From: redkale Date: Sun, 14 Jan 2024 20:47:31 +0800 Subject: [PATCH] =?UTF-8?q?CacheSource=E5=A2=9E=E5=8A=A0delex=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/annotation/PostConstruct.java | 22 +++++++++++++ .../org/redkale/annotation/PreDestroy.java | 21 ++++++++++++ .../org/redkale/source/CacheMemorySource.java | 32 +++++++++++++++++++ .../java/org/redkale/source/CacheSource.java | 7 +++- 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/redkale/annotation/PostConstruct.java create mode 100644 src/main/java/org/redkale/annotation/PreDestroy.java diff --git a/src/main/java/org/redkale/annotation/PostConstruct.java b/src/main/java/org/redkale/annotation/PostConstruct.java new file mode 100644 index 000000000..5d160bbfa --- /dev/null +++ b/src/main/java/org/redkale/annotation/PostConstruct.java @@ -0,0 +1,22 @@ +/* + * + */ +package org.redkale.annotation; + +import java.lang.annotation.Documented; +import static java.lang.annotation.ElementType.*; +import java.lang.annotation.Retention; +import static java.lang.annotation.RetentionPolicy.*; +import java.lang.annotation.Target; + +/** + * + * @since Common Annotations 1.0 + * + * @since 2.8.0 + */ +@Documented +@Retention(RUNTIME) +@Target(METHOD) +public @interface PostConstruct { +} diff --git a/src/main/java/org/redkale/annotation/PreDestroy.java b/src/main/java/org/redkale/annotation/PreDestroy.java new file mode 100644 index 000000000..a4cb43168 --- /dev/null +++ b/src/main/java/org/redkale/annotation/PreDestroy.java @@ -0,0 +1,21 @@ +/* + * + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.*; + +/** + * + * + * @since Common Annotations 1.0 + * + * @since 2.8.0 + */ +@Documented +@Retention(RUNTIME) +@Target(METHOD) +public @interface PreDestroy { +} diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index 670bca4f1..45f5cfaf4 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -704,6 +704,38 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyFuture(() -> del(keys)); } + @Override + public long delex(String key, String expectedValue) { + if (key == null) { + return 0L; + } + containerLock.lock(); + try { + CacheEntry entry = find(key); + if (entry == null) { + return 0; + } else { + entry.lock(); + try { + if (Objects.equals(expectedValue, entry.getObjectValue(convert, String.class))) { + return container.remove(key) == null ? 0 : 1; + } else { + return 0; + } + } finally { + entry.unlock(); + } + } + } finally { + containerLock.unlock(); + } + } + + @Override + public CompletableFuture delexAsync(String key, String expectedValue) { + return supplyFuture(() -> delex(key, expectedValue)); + } + @Override public long incr(final String key) { return incrby(key, 1); diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index e9ca3b569..4a1c0cd52 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -25,7 +25,6 @@ import org.redkale.util.*; * Long统一用setLong、getLong、incr等系列方法。
* 其他则供自定义数据类型使用。 * - * param V value的类型 移除 @2.4.0 *

* 详情见: https://redkale.org * @@ -369,6 +368,10 @@ public interface CacheSource extends Resourcable { return delAsync(keys).join(); } + default long delex(String key, String expectedValue) { + return delexAsync(key, expectedValue).join(); + } + default boolean exists(String key) { return existsAsync(key).join(); } @@ -1301,6 +1304,8 @@ public interface CacheSource extends Resourcable { } //------------------------ 键 Keys ------------------------ + public CompletableFuture delexAsync(String key, String expectedValue); + public CompletableFuture delAsync(String... keys); public CompletableFuture existsAsync(String key);