From 5aa3e61686008e27a78c12ab93401acb7f7d0258 Mon Sep 17 00:00:00 2001 From: redkale Date: Wed, 11 Sep 2024 17:07:46 +0800 Subject: [PATCH] CachedAction --- src/main/java/org/redkale/cached/spi/CachedAction.java | 9 +++++++++ .../java/org/redkale/cached/spi/CachedLocalSource.java | 1 + .../org/redkale/cached/spi/CachedManagerService.java | 6 +++--- .../org/redkale/test/cached/CachedManagerTest.java | 10 +++++++--- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/redkale/cached/spi/CachedAction.java b/src/main/java/org/redkale/cached/spi/CachedAction.java index 9f305d8b7..40da64b2f 100644 --- a/src/main/java/org/redkale/cached/spi/CachedAction.java +++ b/src/main/java/org/redkale/cached/spi/CachedAction.java @@ -182,6 +182,15 @@ public class CachedAction { return key; } + public int getLocalLimit() { + return localLimit; + } + + public void setLocalLimit(int localLimit) { + this.localLimit = localLimit; + ((CachedManagerService) manager).getLocalSource().updateLimit(getName(), localLimit); + } + public Duration getLocalExpire() { return localExpire; } diff --git a/src/main/java/org/redkale/cached/spi/CachedLocalSource.java b/src/main/java/org/redkale/cached/spi/CachedLocalSource.java index 82757d357..d87436eae 100644 --- a/src/main/java/org/redkale/cached/spi/CachedLocalSource.java +++ b/src/main/java/org/redkale/cached/spi/CachedLocalSource.java @@ -136,6 +136,7 @@ public class CachedLocalSource implements Service { } int old = map.limit; map.limit = limit; + map.checkLimit(); return old; } diff --git a/src/main/java/org/redkale/cached/spi/CachedManagerService.java b/src/main/java/org/redkale/cached/spi/CachedManagerService.java index d33ba94c4..6e4f3552c 100644 --- a/src/main/java/org/redkale/cached/spi/CachedManagerService.java +++ b/src/main/java/org/redkale/cached/spi/CachedManagerService.java @@ -75,10 +75,10 @@ public class CachedManagerService implements CachedManager, CachedActionFunc, Se protected final CachedLocalSource localSource = new CachedLocalSource(); // 缓存无效时使用的同步锁 - private final ConcurrentHashMap syncLockMap = new ConcurrentHashMap<>(); + protected final ConcurrentHashMap syncLockMap = new ConcurrentHashMap<>(); // 缓存无效时使用的异步锁 - private final ConcurrentHashMap asyncLockMap = new ConcurrentHashMap<>(); + protected final ConcurrentHashMap asyncLockMap = new ConcurrentHashMap<>(); protected final List actions = new CopyOnWriteArrayList<>(); @@ -232,7 +232,7 @@ public class CachedManagerService implements CachedManager, CachedActionFunc, Se } /** - * 处理指定缓存key的{@link org.redkale.cached.spi.CachedAction} + * 处理指定缓存名称的{@link org.redkale.cached.spi.CachedAction} * * @param name 缓存名称 * @param consumer 处理函数 diff --git a/src/test/java/org/redkale/test/cached/CachedManagerTest.java b/src/test/java/org/redkale/test/cached/CachedManagerTest.java index 01457de78..3cc5e0476 100644 --- a/src/test/java/org/redkale/test/cached/CachedManagerTest.java +++ b/src/test/java/org/redkale/test/cached/CachedManagerTest.java @@ -54,11 +54,15 @@ public class CachedManagerTest { Assertions.assertEquals( manager.localGet("name", bean.getName(), CachingBean.class).toString(), json); - manager.localGetSet("group", "key1", CachingBean.class, true, 2, expire, () -> new CachingBean("v1", "r1")); + manager.localGetSet("group", "key1", CachingBean.class, true, 3, expire, () -> new CachingBean("v1", "r1")); Utility.sleep(2); - manager.localGetSet("group", "key2", CachingBean.class, true, 2, expire, () -> new CachingBean("v2", "r2")); + manager.localGetSet("group", "key2", CachingBean.class, true, 3, expire, () -> new CachingBean("v2", "r2")); Utility.sleep(2); - manager.localGetSet("group", "key3", CachingBean.class, true, 2, expire, () -> new CachingBean("v3", "r3")); + manager.localGetSet("group", "key3", CachingBean.class, true, 3, expire, () -> new CachingBean("v3", "r3")); + Utility.sleep(2); + manager.localGetSet("group", "key4", CachingBean.class, true, 3, expire, () -> new CachingBean("v4", "r4")); + Assertions.assertEquals(3, manager.getLocalSource().getSize("group")); + manager.getLocalSource().updateLimit("group", 2); Assertions.assertEquals(2, manager.getLocalSource().getSize("group")); }