java map缓存数据自动过期
package ztest; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Timer; import java.util.TimerTask; /** * 页面跳转时产生一个 token * 带到页面 * 页面保存时校验token * * 防止重复提交 * * */ public final class TokenCache { private static final Map<String, WrapMapValue> CACHE = new HashMap<String, WrapMapValue>(); private static final int DELAY_TIME_IN_MILLIS = 0; private static final int PERIOD_TIME_IN_MILLIS = 5 * 60 * 1000; static { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { Iterator<WrapMapValue> it = CACHE.values().iterator(); while (it.hasNext()) { WrapMapValue _v = it.next(); if (_v.getCreateTimeInMillis() + _v.getExpirytimeInMillis() < new Date().getTime()) { it.remove(); } } } }, DELAY_TIME_IN_MILLIS, PERIOD_TIME_IN_MILLIS); } private TokenCache(){ } public static void put(String key, String value, long expiryTimeInMillis) { CACHE.put(key, new WrapMapValue(new Date().getTime(), expiryTimeInMillis, value)); } public static String get(String key) { WrapMapValue _v = CACHE.get(key); if (_v.getCreateTimeInMillis() + _v.getExpirytimeInMillis() >= new Date().getTime()) { return _v.getMapValue(); } else { return null; } } } class WrapMapValue { private long bornTimeInMillis; private long lifeTimeInMillis; private String mapValue; WrapMapValue(long bornTimeInMillis, long lifeTimeInMillis, String mapValue) { this.bornTimeInMillis = bornTimeInMillis; this.lifeTimeInMillis = lifeTimeInMillis; this.mapValue = mapValue; } public long getCreateTimeInMillis() { return bornTimeInMillis; } public long getExpirytimeInMillis() { return lifeTimeInMillis; } public String getMapValue() { return mapValue; } }