缓存工具 - CacheUtil
# 缓存工具 - CacheUtil
# 概述
CacheUtil
是 Hutool 提供的缓存创建工具类,支持多种缓存策略的快速创建。通过简单的 API 调用即可创建不同类型的缓存对象,例如 FIFO(先进先出)缓存、LFU(最少使用)缓存、LRU(最近最少使用)缓存、定时缓存等。
这些缓存机制适用于不同场景,帮助你有效管理应用中的缓存数据,避免内存占用过高、频繁的对象创建销毁等问题。
# 支持的缓存类型
- FIFO Cache(先进先出):当缓存容量超出时,最早加入的元素会被清除。
- LFU Cache(最少使用):当缓存容量超出时,使用次数最少的元素会被清除。
- LRU Cache(最近最少使用):当缓存容量超出时,最近最少使用的元素会被清除。
- Timed Cache(定时缓存):缓存元素有有效期,到期后自动失效并被清除。
- Weak Cache(弱引用缓存):使用弱引用存储元素,适合内存敏感的场景。
# 常用方法介绍
# 1. newFIFOCache(int capacity)
创建一个 FIFO 缓存,当缓存超出指定容量时,最早加入的元素将被清除。
示例代码
import cn.hutool.cache.Cache;
import cn.hutool.cache.CacheUtil;
public class CacheExample {
public static void main(String[] args) {
// 创建一个容量为 3 的 FIFO 缓存
Cache<String, String> fifoCache = CacheUtil.newFIFOCache(3);
// 添加元素
fifoCache.put("key1", "value1");
fifoCache.put("key2", "value2");
fifoCache.put("key3", "value3");
// 超出容量后,最早加入的元素将被清除
fifoCache.put("key4", "value4");
// 此时 key1 已被清除,输出结果为 null
System.out.println(fifoCache.get("key1")); // null
System.out.println(fifoCache.get("key2")); // value2
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 2. newLFUCache(int capacity)
创建一个 LFU 缓存,当缓存超出指定容量时,使用次数最少的元素将被清除。
示例代码
Cache<String, String> lfuCache = CacheUtil.newLFUCache(3);
lfuCache.put("key1", "value1");
lfuCache.put("key2", "value2");
lfuCache.put("key3", "value3");
// 使用 key1,增加使用次数
lfuCache.get("key1");
// 添加新元素,key2 因使用次数最少被清除
lfuCache.put("key4", "value4");
System.out.println(lfuCache.get("key2")); // null
System.out.println(lfuCache.get("key1")); // value1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3. newLRUCache(int capacity)
创建一个 LRU 缓存,当缓存超出指定容量时,最近最少使用的元素将被清除。
示例代码
Cache<String, String> lruCache = CacheUtil.newLRUCache(3);
lruCache.put("key1", "value1");
lruCache.put("key2", "value2");
lruCache.put("key3", "value3");
// 使用 key1,使其成为最近使用的元素
lruCache.get("key1");
// 添加新元素,key2 因为最近最少使用被清除
lruCache.put("key4", "value4");
System.out.println(lruCache.get("key2")); // null
System.out.println(lruCache.get("key1")); // value1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 4. newTimedCache(long timeout)
创建一个定时缓存,元素有固定的有效期,到期后自动失效并被清除。
示例代码
Cache<String, String> timedCache = CacheUtil.newTimedCache(2000); // 2秒有效期
timedCache.put("key1", "value1");
timedCache.put("key2", "value2");
// 等待 3 秒后,缓存失效
Thread.sleep(3000);
System.out.println(timedCache.get("key1")); // null
System.out.println(timedCache.get("key2")); // null
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 5. newWeakCache()
创建一个弱引用缓存,使用弱引用存储元素,适合内存敏感的场景。元素在垃圾回收时可能被清除。
示例代码
Cache<String, String> weakCache = CacheUtil.newWeakCache();
weakCache.put("key1", "value1");
// 强制垃圾回收后,可能元素被清除
System.gc();
System.out.println(weakCache.get("key1")); // 可能为 null
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 实际应用场景
- LRU Cache:适合应用程序中缓存查询结果、页面数据等,需要频繁访问的内容。
- LFU Cache:适合需要记录访问频率,保留高频访问内容的场景。
- Timed Cache:适合缓存具有有效期的数据,如验证码、临时数据等。
- Weak Cache:适合缓存不重要的数据,如大型对象图的缓存,确保在内存不足时被自动清理。。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08