我在java中开发磁盘中的图像缓存。其中一个缓存请求是TimeToLive参数。我真的不知道,怎么做,这就是我问你的原因。
据我所知,一些独立的主线程方法shold检查缓存中的每个对象的TTL参数。如果值结束,则应删除对象。例如,每分钟检查一次。
答案 0 :(得分:1)
假设您的缓存是包含图像的目录,您可以像这样清除缓存:
private static void purge(File dir, long ttl) {
long minTime = System.currentTimeMillis()-ttl;
for (File file: dir.listFiles()) {
if (file.lastModified() < minTime) {
file.delete();
}
}
}
现在,如果你想定期这样做,你需要一个计时器:
private static final Timer TIMER = new Timer();
然后您可以安排清除任务:
TimerTask task = new TimerTask() {
@Override
public void run() {
purge(dir, ttl);
}
};
TIMER.schedule(task, period, period);
当不再需要时,任务应该被取消。
你可以把它们放在一个类中:
public class Cache implements Closeable {
private static final Timer TIMER = new Timer(true);
private final File dir;
private final long ttl;
private final TimerTask task;
public Cache(File dir, long ttl, long purgePeriod) {
this.dir = dir;
this.ttl = ttl;
task = new TimerTask() {
@Override
public void run() {
purge();
}
};
TIMER.schedule(task, purgePeriod, purgePeriod);
}
@Override
public void close() throws IOException {
task.cancel();
}
public synchronized void purge() {
long minTime = System.currentTimeMillis()-ttl;
for (File file: dir.listFiles()) {
if (file.isFile() && file.lastModified() < minTime) {
file.delete();
}
}
}
}