From ca782e7c624bb0174c6f92e429d5e95510edeb0d Mon Sep 17 00:00:00 2001 From: redkale Date: Tue, 30 May 2023 10:38:02 +0800 Subject: [PATCH] =?UTF-8?q?CacheSource=E5=A2=9E=E5=8A=A0persist=E3=80=81re?= =?UTF-8?q?name=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/source/CacheMemorySource.java | 65 ++++++++++++++++++- .../java/org/redkale/source/CacheSource.java | 12 ++++ 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index bb415c7bd..acaa5e0b4 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -25,7 +25,7 @@ import org.redkale.service.Local; import org.redkale.util.*; /** - * CacheSource的默认实现--内存缓存 + * CacheSource的默认实现--内存缓存, 此实现只可用于调试,不可用于生产环境 * 注意: url 需要指定为 memory:cachesource * *

@@ -1052,11 +1052,72 @@ public final class CacheMemorySource extends AbstractCacheSource { entry.expireSeconds = expireSeconds; } + @Override + public boolean persist(final String key) { + if (key == null) { + return false; + } + CacheEntry entry = container.get(key); + if (entry == null) { + return false; + } + entry.expireSeconds = 0; + return true; + } + + @Override + public boolean rename(String oldKey, String newKey) { + if (oldKey == null || newKey == null) { + return false; + } + CacheEntry entry = container.get(oldKey); + if (entry == null) { + return false; + } + entry.key = newKey; + container.put(newKey, entry); + container.remove(oldKey); + return true; + } + + @Override + public boolean renamenx(String oldKey, String newKey) { + if (oldKey == null || newKey == null) { + return false; + } + if (container.containsKey(newKey)) { + return false; + } + CacheEntry entry = container.get(oldKey); + if (entry == null) { + return false; + } + entry.key = newKey; + container.put(newKey, entry); + container.remove(oldKey); + return true; + } + @Override public CompletableFuture expireAsync(final String key, final int expireSeconds) { return CompletableFuture.runAsync(() -> expire(key, expireSeconds), getExecutor()).whenComplete(futureCompleteConsumer); } + @Override + public CompletableFuture persistAsync(String key) { + return CompletableFuture.supplyAsync(() -> persist(key), getExecutor()).whenComplete(futureCompleteConsumer); + } + + @Override + public CompletableFuture renameAsync(String oldKey, String newKey) { + return CompletableFuture.supplyAsync(() -> rename(oldKey, newKey), getExecutor()).whenComplete(futureCompleteConsumer); + } + + @Override + public CompletableFuture renamenxAsync(String oldKey, String newKey) { + return CompletableFuture.supplyAsync(() -> renamenx(oldKey, newKey), getExecutor()).whenComplete(futureCompleteConsumer); + } + @Override public int del(final String... keys) { if (keys == null) { @@ -1754,7 +1815,7 @@ public final class CacheMemorySource extends AbstractCacheSource { final CacheEntryType cacheType; - final String key; + String key; //<=0表示永久保存 int expireSeconds; diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index d5e29e5c9..d1841420e 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -164,6 +164,12 @@ public interface CacheSource extends Resourcable { public void expire(final String key, final int seconds); + public boolean persist(final String key); + + public boolean rename(String oldKey, String newKey); + + public boolean renamenx(String oldKey, String newKey); + public int del(final String... keys); public long incr(final String key); @@ -449,6 +455,12 @@ public interface CacheSource extends Resourcable { public CompletableFuture expireAsync(final String key, final int seconds); + public CompletableFuture persistAsync(final String key); + + public CompletableFuture renameAsync(String oldKey, String newKey); + + public CompletableFuture renamenxAsync(String oldKey, String newKey); + public CompletableFuture delAsync(final String... keys); public CompletableFuture incrAsync(final String key);