mirror of
https://github.com/LamGC/ContentGrabbingJi.git
synced 2025-05-01 07:07:31 +00:00
[Update] HotDataCacheStore 增加对自动清理的支持; [Change] RedisPoolCacheStore 将Redis缓存库抽象类设为default(原public); [Change] MiraiMessageSender, BotCommandProcess 适配HotDataCacheStore的修改; [Change] BotCommandProcess 调整ranking命令的输出格式;
53 lines
1.4 KiB
Java
53 lines
1.4 KiB
Java
package net.lamgc.cgj.bot.cache;
|
|
|
|
import com.google.common.base.Throwables;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.util.Set;
|
|
import java.util.Timer;
|
|
import java.util.TimerTask;
|
|
import java.util.concurrent.CopyOnWriteArraySet;
|
|
|
|
public class AutoCleanTimer extends TimerTask {
|
|
|
|
private final static Set<Cleanable> cleanSet = new CopyOnWriteArraySet<>();
|
|
|
|
private final static Timer cleanTimer = new Timer("Thread-AutoClean", true);
|
|
|
|
private final static Logger log = LoggerFactory.getLogger(AutoCleanTimer.class.getName());
|
|
|
|
static {
|
|
cleanTimer.schedule(new AutoCleanTimer(), 100L);
|
|
}
|
|
|
|
/**
|
|
* 增加需要定时执行清理的缓存库
|
|
* @param store 已实现Cleanable的对象
|
|
*/
|
|
public static void add(Cleanable store) {
|
|
cleanSet.add(store);
|
|
}
|
|
|
|
/**
|
|
* 移除已添加的缓存库
|
|
* @param store 需要从AutoCleanTimer移除的对象
|
|
*/
|
|
public static void remove(Cleanable store) {
|
|
cleanSet.remove(store);
|
|
}
|
|
|
|
private AutoCleanTimer() {}
|
|
|
|
@Override
|
|
public void run() {
|
|
cleanSet.forEach(cleanable -> {
|
|
try {
|
|
cleanable.clean();
|
|
} catch (Exception e) {
|
|
log.error("{} 执行清理动作时发生异常:\n{}", cleanable.toString(), Throwables.getStackTraceAsString(e));
|
|
}
|
|
});
|
|
}
|
|
}
|