//package com.ynxbd.wx.utils; // // //import org.slf4j.Logger; //import org.slf4j.LoggerFactory; //import org.slf4j.MDC; //import weixin.popular.support.ExpireKey; // //import java.util.ArrayList; //import java.util.List; //import java.util.Map; //import java.util.concurrent.*; // //public class DefaultExpireKey implements ExpireKey { // // private static final Logger log = LoggerFactory.getLogger(DefaultExpireKey.class); // private final Map map = new ConcurrentHashMap<>(); // // private Integer period = 60; // private ScheduledExecutorService scheduledExecutorService; // // public DefaultExpireKey() { // cleanExpireKey(); // } // // /** // * @param period 清理key 间隔时间,默认60秒。 // */ // public DefaultExpireKey(int period) { // this.period = period; // cleanExpireKey(); // } // // private void cleanExpireKey() { // log.info("创建keyList"); // if (scheduledExecutorService != null) { // scheduledExecutorService.shutdownNow(); // } // // 守护线程 自动清理过期key ,间隔时间60秒 // scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { // // @Override // public Thread newThread(Runnable arg0) { // MDC.remove("ip"); // MDC.put("ip", "Keys守护线程"); // // Thread thread = Executors.defaultThreadFactory().newThread(arg0); // thread.setDaemon(true); // return thread; // } // }); // // scheduledExecutorService.scheduleWithFixedDelay(new Runnable() { // @Override // public void run() { // MDC.remove("ip"); // MDC.put("ip", "定时任务"); // List removeKey = new ArrayList<>(); // for (String key : map.keySet()) { // Integer value = map.get(key); // long current = System.currentTimeMillis() / 1000; // if (value != null && value <= current) { //// logger.info("delete:current=" + current + ", value=" + value); // removeKey.add(key); // } //// else { //// logger.info("remain:current=" + current + ", value=" + value); //// } // } // for (String key : removeKey) { // map.remove(key); // } // if (removeKey.size() > 0) // log.info(String.format("clean %d keys, remain %d keys", removeKey.size(), map.size())); // } // }, 10, period, TimeUnit.SECONDS); // } // // @Override // public boolean add(String key, int expire) { // log.info("add key=" + key); // map.put(key, (int) (System.currentTimeMillis() / 1000) + expire); // return true; // } // // @Override // public boolean add(String key) { // return add(key, DEFAULT_EXPIRE); // } // // @Override // public boolean exists(String key) { // Integer value = map.get(key); // if (value == null) { // return false; // } else { // return value > System.currentTimeMillis() / 1000; // } // } // // //}