最近在做zuul的限流功能!在filter中我用ConCurrentHashMap计数,然而map中的key没有失效删除的地方。
于是就搜了一下,结果搜到的结果不是很满意,很多搜到的实现都是让key失效了,但是还是保存在map中!我真正想要的是能够让key定时失效,失效的key被gc!
所以按如下规则自己写了一个map:
1、该map的实现基于ConcurrentMap,在并发情况下保证了线程安全;
2、该map没存保存key、value的时候,都要同同时保存key的有效时间;
3、该map自带一个定时任务,每次定时任务触发都会遍历该map清除失效的key-value,并释放缓存。
不多说了,代码如下:
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* @Description: 带有效期的Map。
* 每个key存入该map时,都需要设置key的有效期!当超期后,该key失效!
* 此外,该map加入了一个定时器,每间隔一段时间,就自动扫描该map一次,清除失效的key
* @author: yu.jinlong
* @Date: 2019-11-22 16:42:50
* @param <K>
* @param <V>
*/
public class ExpiryMap<K, V> implements Map<K, V> {
private boolean isRefresh = false;