diff --git a/src/main/java/org/redkale/cache/spi/CacheAction.java b/src/main/java/org/redkale/cache/spi/CacheAction.java index e85991ec5..62ea2bf3b 100644 --- a/src/main/java/org/redkale/cache/spi/CacheAction.java +++ b/src/main/java/org/redkale/cache/spi/CacheAction.java @@ -106,7 +106,7 @@ public class CacheAction { this.keyGenerator = resourceFactory.findChild(generatorName, CacheKeyGenerator.class); } else { MultiHashKey dynKey = MultiHashKey.create(paramNames, key); - this.keyGenerator = (t, a, args) -> dynKey.keyFor(args); + this.keyGenerator = CacheKeyGenerator.create(dynKey); } this.remoteExpire = createDuration(cached.getRemoteExpire()); } diff --git a/src/main/java/org/redkale/cache/spi/CacheKeyGenerator.java b/src/main/java/org/redkale/cache/spi/CacheKeyGenerator.java index a3dadf65f..908524eef 100644 --- a/src/main/java/org/redkale/cache/spi/CacheKeyGenerator.java +++ b/src/main/java/org/redkale/cache/spi/CacheKeyGenerator.java @@ -4,6 +4,9 @@ package org.redkale.cache.spi; +import java.util.Objects; +import org.redkale.util.MultiHashKey; + /** * 缓存key生成器 * @@ -33,7 +36,25 @@ public interface CacheKeyGenerator { * * @return name */ - default String name() { - return ""; + public String name(); + + /** + * 根据MultiHashKey生成一个CacheKeyGenerator + * @param key MultiHashKey + * @return + */ + public static CacheKeyGenerator create(MultiHashKey key) { + Objects.requireNonNull(key); + return new CacheKeyGenerator() { + @Override + public String generate(Object target, CacheAction action, Object... params) { + return key.keyFor(params); + } + + @Override + public String name() { + return ""; + } + }; } }