Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
70 lines (58 loc) · 1.8 KB

File metadata and controls

70 lines (58 loc) · 1.8 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
package cache.expire;
import cache.Cache;
import cache.ICacheExpire;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class CacheExpire<K, V> implements ICacheExpire<K, V> {
// 需要进行过期处理的缓存
private final Cache<K, V> cache;
// 用来储存key对应的过期时间的map
private final Map<K, Long> expireMap = new HashMap<>();
// 用一个定时线程池用来执行删除操作
private static final ScheduledExecutorService expireThread = Executors.newSingleThreadScheduledExecutor();
/**
* 指定某个key过期的时间
* @param key key
* @param expireAt 什么时候过期
*/
@Override
public void expire(K key, long expireAt) {
this.expireMap.put(key, expireAt);
}
public CacheExpire(Cache<K, V> cache) {
this.cache = cache;
init();
}
/**
* 设定单例定时线程的执行参数
*/
private void init() {
expireThread.scheduleAtFixedRate(new ExpireCacheThread(), 1000, 1000, TimeUnit.MILLISECONDS);
}
/**
* 用来执行清除过期缓存
*/
private class ExpireCacheThread implements Runnable {
@Override
public void run() {
Set<Map.Entry<K, Long>> entries = expireMap.entrySet();
for (Map.Entry<K, Long> entry : entries) {
expireCache(entry.getKey(), entry.getValue());
}
}
}
/**
* @param key
* @param expireAt
*/
private void expireCache(K key, long expireAt) {
long nowTime = System.currentTimeMillis();
if (nowTime > expireAt) {
cache.remove(key);
}
}
}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.