mirror of
				https://gitee.com/dromara/hutool.git
				synced 2025-10-25 10:19:23 +08:00 
			
		
		
		
	Cache.put变更策略,对于替换的键值对,不清理队列
This commit is contained in:
		| @@ -2,7 +2,7 @@ | |||||||
| # 🚀Changelog | # 🚀Changelog | ||||||
|  |  | ||||||
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ||||||
| # 5.8.29(2024-06-17) | # 5.8.29(2024-06-18) | ||||||
|  |  | ||||||
| ### 🐣新特性 | ### 🐣新特性 | ||||||
| * 【core   】      DateUtil增加offsetYear方法 | * 【core   】      DateUtil增加offsetYear方法 | ||||||
| @@ -11,6 +11,7 @@ | |||||||
| * 【core   】      优化DateUtil.format(Date date, String format)接口效率(pr#1226@Gitee) | * 【core   】      优化DateUtil.format(Date date, String format)接口效率(pr#1226@Gitee) | ||||||
| * 【csv    】      CsvWriter.writeBeans增加重载,可选是否写出表头(issue#IA57W2@Gitee) | * 【csv    】      CsvWriter.writeBeans增加重载,可选是否写出表头(issue#IA57W2@Gitee) | ||||||
| * 【core   】      BetweenFormatter支持自定义设置单位(pr#1228@Gitee) | * 【core   】      BetweenFormatter支持自定义设置单位(pr#1228@Gitee) | ||||||
|  | * 【cache  】      Cache.put变更策略,对于替换的键值对,不清理队列(issue#3618@Github) | ||||||
|  |  | ||||||
| ### 🐞Bug修复 | ### 🐞Bug修复 | ||||||
| * 【core   】      修复AnnotationUtil可能的空指针错误 | * 【core   】      修复AnnotationUtil可能的空指针错误 | ||||||
|   | |||||||
| @@ -85,10 +85,20 @@ public abstract class AbstractCache<K, V> implements Cache<K, V> { | |||||||
| 		if (timeout != 0) { | 		if (timeout != 0) { | ||||||
| 			existCustomTimeout = true; | 			existCustomTimeout = true; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		final MutableObj<K> mKey = MutableObj.of(key); | ||||||
|  |  | ||||||
|  | 		// issue#3618 对于替换的键值对,不做满队列检查和清除 | ||||||
|  | 		if (cacheMap.containsKey(mKey)) { | ||||||
|  | 			// 存在相同key,覆盖之 | ||||||
|  | 			cacheMap.put(mKey, co); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		if (isFull()) { | 		if (isFull()) { | ||||||
| 			pruneCache(); | 			pruneCache(); | ||||||
| 		} | 		} | ||||||
| 		cacheMap.put(MutableObj.of(key), co); | 		cacheMap.put(mKey, co); | ||||||
| 	} | 	} | ||||||
| 	// ---------------------------------------------------------------- put end | 	// ---------------------------------------------------------------- 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
	 Looly
					Looly