带过期的map
package com.ww.pss; import com.google.common.collect.Maps; import java.util.Map; /** * 带过期的内存缓存 * 过期时间参数 单位毫秒 */ public class ExpiryMap { /** * 记录数据map */ private static final Map<String,String> dataMap = Maps.newHashMap(); /** * 记录时间map */ private static final Map<String,Long> timeMap = Maps.newHashMap(); public static void put(String key,String value,long expiry){ dataMap.put(key,value); timeMap.put(key,millis(expiry)); } public static void put(String key,String value){ dataMap.put(key,value); } public static void remove(String key){ dataMap.remove(key); timeMap.remove(key); } /** * 判断是否过期 过期则清空map并返回null 未过期则返回值 */ public static String get(String key){ if( isExpiry(key) ){ remove(key); return null; }else{ return dataMap.get(key); } } /** * 判断键是否过期 */ private static boolean isExpiry(String key){ Long time = timeMap.get(key); if( time == null ){ return false; }else{ return isTimeExpiry(time); } } /** * 判断是否到了过期时间 */ private static boolean isTimeExpiry(long time){ return time <= System.currentTimeMillis(); } /** * 过期后未调用get方法则一直不会被清理,则需要定时清理过期数据 */ public static void clear(){ for(Map.Entry<String, Long> entry : timeMap.entrySet()){ String key = entry.getKey(); Long value = entry.getValue(); if( isTimeExpiry(value) ){ remove(key); } } } private static Long millis(long expiry){ return System.currentTimeMillis()+expiry; } }
内容加载中...

浙公网安备 33010602011771号