JAVA中的哪些类可以组织在缓存中检查TimeToLive?

时间:2018-02-02 11:02:17

标签: java caching ttl

我在java中开发磁盘中的图像缓存。其中一个缓存请求是TimeToLive参数。我真的不知道,怎么做,这就是我问你的原因。

据我所知,一些独立的主线程方法shold检查缓存中的每个对象的TTL参数。如果值结束,则应删除对象。例如,每分钟检查一次。

1 个答案:

答案 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();
            }
        }
    }
}