JAVA中的什么类可以组织检查缓存中的TimeToLive?
What classes in JAVA can organize checking of TimeToLive in cache?
我正在 java 开发磁盘中的图像缓存。缓存请求之一是 TimeToLive 参数。我真的不知道,该怎么做,这就是我问你的原因。
据我了解,一些独立于主线程的方法应该检查缓存中每个对象的 TTL 参数。如果该值超过,则应删除对象。例如,每分钟检查一次。
假设您的缓存是一个包含图像的目录,您可以像这样清除缓存:
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);
当不再需要时应取消该任务。
你可以把它们放在一起 class:
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();
}
}
}
}
我正在 java 开发磁盘中的图像缓存。缓存请求之一是 TimeToLive 参数。我真的不知道,该怎么做,这就是我问你的原因。
据我了解,一些独立于主线程的方法应该检查缓存中每个对象的 TTL 参数。如果该值超过,则应删除对象。例如,每分钟检查一次。
假设您的缓存是一个包含图像的目录,您可以像这样清除缓存:
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);
当不再需要时应取消该任务。
你可以把它们放在一起 class:
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();
}
}
}
}