做国外衣服的网站有哪些长尾关键词是什么意思
本地有一些数据需要用到map存储,希望能够设置过期时间,用远程缓存redis、memcache的话可以实现,但是又觉得大材小用,毕竟仅仅是少量的数据。
ExpiringMap 实现了这个功能
ExpiringMap
github
最新maven依赖
<!-- https://mvnrepository.com/artifact/net.jodah/expiringmap -->
<dependency><groupId>net.jodah</groupId><artifactId>expiringmap</artifactId><version>0.5.9</version>
</dependency>
maven 依赖仓库各种版本
功能:
1.可设置Map中的Entry在一段时间后自动过期。
2.可设置Map最大容纳值,当到达Maximum size后,再次插入值会导致Map中的第一个值立即过期。
3.可添加监听事件,在监听到Entry过期时调度监听函数。
4.可以设置懒加载,在调用get()方法时创建对象。
ExpiringMap 继承的是ConcurrentMap, 所以也是线程安全的.
粟子
ExpiringMap<String,String> map = ExpiringMap.builder()
//设置最大值,添加第101个entry时,会导致第1个立马过期(即使没到过期时间).maxSize(100)
//设置每个key有效时间60s,如果key不设置过期时间,key永久有效.expiration(60, TimeUnit.SECONDS)
//允许更新过期时间值,如果不设置variableExpiration,不允许后面更改过期时间,一旦执行更改过期时间操作会抛异常UnsupportedOperationException.variableExpiration()
//CREATED:只在put和replace方法清零过期时间
//ACCESSED:在CREATED策略基础上增加 在还没过期时get方法清零过期时间。
//清零过期时间也就是重置过期时间,重新计算过期时间.expirationPolicy(ExpirationPolicy.CREATED).build();map.put("test","123456");
System.out.println(map.get("test"));
注意:
上面设置都是在创建map时设置的,也可以在创建完map后用map方法设置,具体看 expiringmap
在创建map和用map的方法设置过期时间和过期策略都是全局的,对map中添加的每一个entry都适用.
在put一个entry键值对时可以对当前entry 单独设置 过期时间、过期策略,只对当前这个entry有效,如:
map.put("key","value",100,TimeUnit.SECONDS);
map.put("key","value",expirationPolicy(ExpirationPolicy.CREATED));
map.put("key","value",expirationPolicy(ExpirationPolicy.CREATED),TimeUnit.SECONDS,100,TimeUnit.SECONDS);
如果创建map和创建了map后没有设置variableExpiration来允许后面更改过期时间,那么put不允许设置过期时间,如果设置过期时间会抛异常:UnsupportedOperationException
谷歌也提供了一个带过期时间的map工具 guava ,有兴趣的可以去搜下.