From 12a39ac405e96852e43e5dd644ae9532e63ec094 Mon Sep 17 00:00:00 2001 From: redkale Date: Wed, 11 Sep 2024 16:51:33 +0800 Subject: [PATCH] CachedLocalSource --- .../redkale/cached/spi/CachedLocalSource.java | 24 +++++++++++++++---- .../test/cached/CachedManagerTest.java | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/redkale/cached/spi/CachedLocalSource.java b/src/main/java/org/redkale/cached/spi/CachedLocalSource.java index f33662945..82757d357 100644 --- a/src/main/java/org/redkale/cached/spi/CachedLocalSource.java +++ b/src/main/java/org/redkale/cached/spi/CachedLocalSource.java @@ -52,7 +52,7 @@ public class CachedLocalSource implements Service { this.scheduler = Utility.newScheduledExecutor( 1, "Redkale-" + CachedLocalSource.class.getSimpleName() + "-Expirer-Thread"); final List keys = new ArrayList<>(); - int interval = 30; + int interval = 15; scheduler.scheduleWithFixedDelay( () -> { try { @@ -69,7 +69,11 @@ public class CachedLocalSource implements Service { } }); } catch (Throwable t) { - logger.log(Level.SEVERE, "CachedLocalSource schedule(interval=" + interval + "s) error", t); + logger.log( + Level.SEVERE, + CachedLocalSource.class.getSimpleName() + " schedule(interval=" + interval + + "s) error", + t); } }, interval, @@ -120,11 +124,21 @@ public class CachedLocalSource implements Service { return CompletableFuture.runAsync(() -> set(name, key, localLimit, millis, type, value)); } - public int getKeyCount(String name) { + public int getSize(String name) { CacheMap map = container.get(name); return map == null ? -1 : map.size(); } + public int updateLimit(String name, int limit) { + CacheMap map = container.get(name); + if (map == null) { + return -1; + } + int old = map.limit; + map.limit = limit; + return old; + } + protected static class CacheMap { protected final ReentrantLock lock = new ReentrantLock(); @@ -169,7 +183,7 @@ public class CachedLocalSource implements Service { return map.size(); } - void checkLimit() { + protected void checkLimit() { int l = limit; if (l > 0 && map.size() > l) { lock.lock(); @@ -197,7 +211,7 @@ public class CachedLocalSource implements Service { protected String value; // 为0表示永久, 大于0表示有过期时间 - private long endMillis; + protected long endMillis; private long createTime = System.currentTimeMillis(); diff --git a/src/test/java/org/redkale/test/cached/CachedManagerTest.java b/src/test/java/org/redkale/test/cached/CachedManagerTest.java index 3abfe8178..01457de78 100644 --- a/src/test/java/org/redkale/test/cached/CachedManagerTest.java +++ b/src/test/java/org/redkale/test/cached/CachedManagerTest.java @@ -59,7 +59,7 @@ public class CachedManagerTest { manager.localGetSet("group", "key2", CachingBean.class, true, 2, expire, () -> new CachingBean("v2", "r2")); Utility.sleep(2); manager.localGetSet("group", "key3", CachingBean.class, true, 2, expire, () -> new CachingBean("v3", "r3")); - Assertions.assertEquals(2, manager.getLocalSource().getKeyCount("group")); + Assertions.assertEquals(2, manager.getLocalSource().getSize("group")); } @Test