Cache.put变更策略,对于替换的键值对,不清理队列

This commit is contained in:
Looly
2024-06-18 11:34:46 +08:00
parent c5e1ba85f8
commit 2d40dd1927
3 changed files with 35 additions and 2 deletions

View File

@@ -85,10 +85,20 @@ public abstract class AbstractCache<K, V> implements Cache<K, V> {
if (timeout != 0) {
existCustomTimeout = true;
}
final MutableObj<K> mKey = MutableObj.of(key);
// issue#3618 对于替换的键值对,不做满队列检查和清除
if (cacheMap.containsKey(mKey)) {
// 存在相同key覆盖之
cacheMap.put(mKey, co);
return;
}
if (isFull()) {
pruneCache();
}
cacheMap.put(MutableObj.of(key), co);
cacheMap.put(mKey, co);
}
// ---------------------------------------------------------------- put end

View File

@@ -0,0 +1,22 @@
package cn.hutool.cache;
import cn.hutool.cache.impl.FIFOCache;
import org.junit.Assert;
import org.junit.Test;
public class Issue3618Test {
@Test
public void putTest() {
FIFOCache<Object, Object> cache = CacheUtil.newFIFOCache(3);
cache.put(1, 1);
cache.put(2, 1);
cache.put(3, 1);
Assert.assertEquals(3, cache.size());
// issue#3618 对于替换的键值对,不做满队列检查和清除
cache.put(3, 2);
Assert.assertEquals(3, cache.size());
}
}