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

This commit is contained in:
Looly 2024-06-18 11:37:37 +08:00
parent 3d3a1d90ca
commit c2641bf97b
2 changed files with 35 additions and 3 deletions

View File

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

View File

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