package phoenix.lru; import java.util.Iterator; import java.util.Map.Entry; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; import lombok.Getter; import lombok.Setter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LRUCacheManager { private static Logger logger = LoggerFactory.getLogger(LRUCacheManager.class); ; private static final ConcurrentHashMap<String, LRUCache> MANAGER = new ConcurrentHashMap<String, LRUCache>(); public synchronized static void regist(String key, LRUCache cache) { if (MANAGER.contains(key)) { MANAGER.put(key + "|" + cache.toString(), cache); } else { MANAGER.put(key, cache); } } @Setter @Getter private boolean needLog = false; @Setter @Getter private long scheduleTime = 2 * 60 * 1000; private Timer timer; public void init() { if (needLog) { timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { toLog(true); } }, 0, scheduleTime); } } private void toLog(boolean clean2Zero) { Iterator<Entry<String, LRUCache>> it = MANAGER.entrySet().iterator(); Entry<String, LRUCache> e; while (it.hasNext()) { e = it.next(); logger.warn(e.getKey() + "\t" + e.getValue().toLog()); if (clean2Zero) e.getValue().cleanStats(); } } }