mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
Cache.put变更策略,对于替换的键值对,不清理队列
This commit is contained in:
@@ -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
|
||||
|
||||
|
22
hutool-cache/src/test/java/cn/hutool/cache/Issue3618Test.java
vendored
Normal file
22
hutool-cache/src/test/java/cn/hutool/cache/Issue3618Test.java
vendored
Normal 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());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user