From 8a19914a076eb39f0b8dc59247b65fc50c094772 Mon Sep 17 00:00:00 2001 From: redkale Date: Wed, 27 Dec 2023 09:36:27 +0800 Subject: [PATCH] =?UTF-8?q?CacheSource=E5=A2=9E=E5=8A=A0setnxpx=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/source/CacheMemorySource.java | 46 ++++++++++--- .../java/org/redkale/source/CacheSource.java | 66 +++++++++++++++++++ 2 files changed, 104 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index 9f52b9220..4dc6bfd2f 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -346,6 +346,11 @@ public final class CacheMemorySource extends AbstractCacheSource { @Override public boolean setnxex(String key, int expireSeconds, Convert convert, Type type, T value) { + return setnxpx(key, expireSeconds * 1000, convert, type, value); + } + + @Override + public boolean setnxpx(String key, int milliSeconds, Convert convert, Type type, T value) { CacheEntry entry = find(key); if (entry == null) { containerLock.lock(); @@ -355,7 +360,7 @@ public final class CacheMemorySource extends AbstractCacheSource { entry = new CacheEntry(CacheEntryType.OBJECT, key); container.put(key, entry); entry.setObjectValue(convert == null ? this.convert : convert, type, value); - entry.expireSeconds(expireSeconds); + entry.milliSeconds(milliSeconds); entry.lastAccessed = System.currentTimeMillis(); return true; } @@ -372,6 +377,11 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyFuture(() -> setnxex(key, expireSeconds, convert, type, value)); } + @Override + public CompletableFuture setnxpxAsync(String key, int milliSeconds, Convert convert, Type type, T value) { + return supplyFuture(() -> setnxpx(key, milliSeconds, convert, type, value)); + } + @Override public T getSet(String key, Convert convert, Type type, T value) { CacheEntry entry = find(key, CacheEntryType.OBJECT); @@ -405,7 +415,7 @@ public final class CacheMemorySource extends AbstractCacheSource { return supplyFuture(() -> getDel(key, type)); } - private void set0(String key, int expireSeconds, Convert convert, Type type, Object value) { + private void set0(String key, int milliSeconds, Convert convert, Type type, Object value) { CacheEntry entry = find(key, CacheEntryType.OBJECT); if (entry == null) { containerLock.lock(); @@ -422,7 +432,7 @@ public final class CacheMemorySource extends AbstractCacheSource { entry.lock(); try { entry.setObjectValue(convert == null ? this.convert : convert, type, value); - entry.expireSeconds(expireSeconds); + entry.milliSeconds(milliSeconds); entry.lastAccessed = System.currentTimeMillis(); } finally { entry.unlock(); @@ -460,7 +470,7 @@ public final class CacheMemorySource extends AbstractCacheSource { @Override public void setex(String key, int expireSeconds, Convert convert, Type type, T value) { - set0(key, expireSeconds, convert, type, value); + set0(key, expireSeconds * 1000, convert, type, value); } @Override @@ -468,15 +478,30 @@ public final class CacheMemorySource extends AbstractCacheSource { return runFuture(() -> setex(key, expireSeconds, convert, type, value)); } + @Override + public void setpx(String key, int milliSeconds, Convert convert, Type type, T value) { + set0(key, milliSeconds, convert, type, value); + } + + @Override + public CompletableFuture setpxAsync(String key, int milliSeconds, Convert convert, Type type, T value) { + return runFuture(() -> setpx(key, milliSeconds, convert, type, value)); + } + @Override public void expire(String key, int expireSeconds) { + pexpire(key, expireSeconds * 1000); + } + + @Override + public void pexpire(String key, int milliSeconds) { CacheEntry entry = find(key); if (entry == null) { return; } entry.lock(); try { - entry.expireSeconds(expireSeconds); + entry.milliSeconds(milliSeconds); } finally { entry.unlock(); } @@ -487,6 +512,11 @@ public final class CacheMemorySource extends AbstractCacheSource { return runFuture(() -> expire(key, expireSeconds)); } + @Override + public CompletableFuture pexpireAsync(String key, int milliSeconds) { + return runFuture(() -> pexpire(key, milliSeconds)); + } + @Override public boolean persist(final String key) { CacheEntry entry = find(key); @@ -735,7 +765,7 @@ public final class CacheMemorySource extends AbstractCacheSource { return null; } if (expireSeconds > 0) { - entry.expireSeconds(expireSeconds); + entry.milliSeconds(expireSeconds * 1000); } final Convert c = convert == null ? this.convert : convert; // OBJECT, ATOMIC, DOUBLE, SSET, ZSET, LIST, MAP; @@ -2327,8 +2357,8 @@ public final class CacheMemorySource extends AbstractCacheSource { } } - public CacheEntry expireSeconds(int expireSeconds) { - this.expireMills = expireSeconds > 0 ? expireSeconds * 1000 : 0; + public CacheEntry milliSeconds(int milliSeconds) { + this.expireMills = milliSeconds > 0 ? milliSeconds : 0; return this; } diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index 4104dc880..da3b1a1e2 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -214,6 +214,22 @@ public interface CacheSource extends Resourcable { setex(key, expireSeconds, Long.class, value); } + default void setpx(String key, int milliSeconds, Convert convert, Type type, T value) { + setpxAsync(key, milliSeconds, convert, type, value).join(); + } + + default void setpx(String key, int milliSeconds, Type type, T value) { + setpx(key, milliSeconds, (Convert) null, type, value); + } + + default void setpxString(String key, int milliSeconds, String value) { + setpx(key, milliSeconds, String.class, value); + } + + default void setpxLong(String key, int milliSeconds, long value) { + setpx(key, milliSeconds, Long.class, value); + } + //------------------------ setnxex ------------------------ default boolean setnxex(String key, int expireSeconds, Convert convert, Type type, T value) { return setnxexAsync(key, expireSeconds, convert, type, value).join(); @@ -231,6 +247,22 @@ public interface CacheSource extends Resourcable { return setnxex(key, expireSeconds, Long.class, value); } + default boolean setnxpx(String key, int milliSeconds, Convert convert, Type type, T value) { + return setnxpxAsync(key, milliSeconds, convert, type, value).join(); + } + + default boolean setnxpx(String key, int milliSeconds, Type type, T value) { + return setnxpx(key, milliSeconds, (Convert) null, type, value); + } + + default boolean setnxpxString(String key, int milliSeconds, String value) { + return setnxpx(key, milliSeconds, String.class, value); + } + + default boolean setnxpxLong(String key, int milliSeconds, long value) { + return setnxpx(key, milliSeconds, Long.class, value); + } + //------------------------ get ------------------------ default T get(String key, Type type) { return (T) getAsync(key, type).join(); @@ -345,6 +377,10 @@ public interface CacheSource extends Resourcable { expireAsync(key, expireSeconds).join(); } + default void pexpire(String key, int milliSeconds) { + pexpireAsync(key, milliSeconds).join(); + } + default List keys(String pattern) { return keysAsync(pattern).join(); } @@ -1101,6 +1137,20 @@ public interface CacheSource extends Resourcable { return setexAsync(key, expireSeconds, Long.class, value); } + public CompletableFuture setpxAsync(String key, int milliSeconds, Convert convert, Type type, T value); + + default CompletableFuture setpxAsync(String key, int milliSeconds, Type type, T value) { + return setpxAsync(key, milliSeconds, (Convert) null, type, value); + } + + default CompletableFuture setpxStringAsync(String key, int milliSeconds, String value) { + return setpxAsync(key, milliSeconds, String.class, value); + } + + default CompletableFuture setpxLongAsync(String key, int milliSeconds, long value) { + return setpxAsync(key, milliSeconds, Long.class, value); + } + //------------------------ setnxex ------------------------ public CompletableFuture setnxexAsync(String key, int expireSeconds, Convert convert, Type type, T value); @@ -1116,6 +1166,20 @@ public interface CacheSource extends Resourcable { return setnxexAsync(key, expireSeconds, Long.class, value); } + public CompletableFuture setnxpxAsync(String key, int milliSeconds, Convert convert, Type type, T value); + + default CompletableFuture setnxpxAsync(String key, int milliSeconds, Type type, T value) { + return setnxpxAsync(key, milliSeconds, (Convert) null, type, value); + } + + default CompletableFuture setnxpxStringAsync(String key, int milliSeconds, String value) { + return setnxpxAsync(key, milliSeconds, String.class, value); + } + + default CompletableFuture setnxpxLongAsync(String key, int milliSeconds, long value) { + return setnxpxAsync(key, milliSeconds, Long.class, value); + } + //------------------------ get ------------------------ public CompletableFuture getAsync(String key, Type type); @@ -1219,6 +1283,8 @@ public interface CacheSource extends Resourcable { public CompletableFuture expireAsync(String key, int seconds); + public CompletableFuture pexpireAsync(String key, int mills); + public CompletableFuture> keysAsync(String pattern); default CompletableFuture> keysAsync() {