You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					103 lines
				
				3.4 KiB
			
		
		
			
		
	
	
					103 lines
				
				3.4 KiB
			| 
											3 years ago
										 | //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<String, Integer> 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<String> 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;
 | ||
|  | //        }
 | ||
|  | //    }
 | ||
|  | //
 | ||
|  | //
 | ||
|  | //}
 |