diff --git a/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCache.java b/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCache.java index 4e12eb61..72cfece3 100644 --- a/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCache.java +++ b/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCache.java @@ -15,6 +15,7 @@ * @author huangli */ public class MultiLevelCache extends AbstractCache { + private Cache[] caches; private MultiLevelCacheConfig config; @@ -102,11 +103,11 @@ private void checkResultAndFillUpperCache(K key, int i, CacheValueHolder h) { long now = System.currentTimeMillis(); if (now <= currentExpire) { /* - 原来这里有两种情况: - - 如果 isUseExpireOfSubCache,那么让 Local 自己选择过期时间 - - 如果为 false,那么选择远程的剩余时间作为过期时间 - 现在的代码,总是选择远程的剩余时间作为过期时间,但是增加了参数 isForce 来控制不能超过配置的本地缓存时间 - 而对于用户直接 PUT_EXPIRED 则允许此类操作 + There are two situations here from the legacy version: + - if isUseExpireOfSubCache, let subordinate cache choose the expiration time by itself + - if not, choose the remaining time of the current cache as the expiration time + In the current version, the remaining time of the current cache is always chosen as the expiration time, + but a parameter isForce is added to control that it cannot exceed the expiration time that subordinate cache configured */ long restTtl = currentExpire - now; if (restTtl > 0) { @@ -172,7 +173,7 @@ private CacheResult PUT_caches(int lastIndex, K key, V value, long expire, TimeU if (timeUnit == null) { r = cache.PUT(key, value); } else { - // 只有 isForce = 用户强制 或者 expire <= 本地缓存时间 才会使用参数的 expire + // only use argument expiration time when user force and expiration minus than configuration if (isForce || expire <= cache.config().getExpireAfterWriteInMillis()) { r = cache.PUT(key, value, expire, timeUnit); } else { diff --git a/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheBuilder.java b/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheBuilder.java index 440ab692..abd0faf5 100644 --- a/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheBuilder.java +++ b/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheBuilder.java @@ -40,6 +40,15 @@ public void setCaches(List caches) { getConfig().setCaches(caches); } + @Deprecated + public T useExpireOfSubCache(boolean useExpireOfSubCache) { + return self(); + } + + @Deprecated + public void setUseExpireOfSubCache(boolean useExpireOfSubCache) { + } + @Override public T keyConvertor(Function keyConvertor) { throw new UnsupportedOperationException("MultiLevelCache do not need a key convertor"); diff --git a/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheConfig.java b/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheConfig.java index 0c359eb8..9244743e 100644 --- a/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheConfig.java +++ b/jetcache-core/src/main/java/com/alicp/jetcache/MultiLevelCacheConfig.java @@ -10,6 +10,7 @@ */ public class MultiLevelCacheConfig extends CacheConfig { private List> caches = new ArrayList<>(); + private boolean useExpireOfSubCache; @Override public MultiLevelCacheConfig clone() { @@ -27,4 +28,14 @@ public List> getCaches() { public void setCaches(List> caches) { this.caches = caches; } + + @Deprecated + public boolean isUseExpireOfSubCache() { + return useExpireOfSubCache; + } + + @Deprecated + public void setUseExpireOfSubCache(boolean useExpireOfSubCache) { + this.useExpireOfSubCache = useExpireOfSubCache; + } }