CacheUtil.java
2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package com.pipihelper.project.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
public class CacheUtil {
private static final long DEFAULT_TIMEOUT = 3600 * 1000 * 10;
private static final int DEFAULT_CAPACITY = 1024;
private static final Timer timer;
private static final int MAX_CAPACITY = 10000;
private static final ConcurrentHashMap<String, Object> map;
private static final long SECOND_TIME = 1000;
static {
map = new ConcurrentHashMap<>(DEFAULT_CAPACITY);
timer = new Timer();
}
/**
* 缓存任务清除类
*/
static class ClearTask extends TimerTask {
private String key;
public ClearTask(String key) {
this.key = key;
}
@Override
public void run() {
CacheUtil.remove(key);
}
}
//私有化构造方法
private CacheUtil() {
}
//==================缓存的增删改查
/**
* 添加缓存
*/
public static boolean put(String key, Object object) {
if (checkCapacity()) {
map.put(key, object);
//默认缓存时间
timer.schedule(new ClearTask(key), DEFAULT_TIMEOUT);
return true;
}
return false;
}
/**
* 添加缓存
*/
public static boolean put(String key, Object object, int time_out) {
if (checkCapacity()) {
map.put(key, object);
//默认缓存时间
timer.schedule(new ClearTask(key), time_out * SECOND_TIME);
}
return false;
}
/**
* 判断容量大小
*/
public static boolean checkCapacity() {
return map.size() < MAX_CAPACITY;
}
/**
* 批量增加缓存
*/
public static boolean put(Map<String, Object> m, int time_out) {
if (map.size() + m.size() <= MAX_CAPACITY) {
map.putAll(map);
for (String key : m.keySet()) {
timer.schedule(new ClearTask(key), time_out * SECOND_TIME);
}
return true;
}
return false;
}
/**
* 删除缓存
*/
public static void remove(String key) {
map.remove(key);
}
/**
* 清除所有缓存
*/
public void clearAll() {
if (map.size() > 0) {
map.clear();
}
timer.cancel();
}
/**
* 获取缓存
*/
public static Object get(String key) {
return map.get(key);
}
/**
* 是否包含某个缓存
*/
public static boolean isContain(String key) {
return map.contains(key);
}
}