expiringmap 设置key 过期时间

<dependency> 
    <groupId>net.jodah</groupId> 
    <artifactId>expiringmap</artifactId> 
    <version>0.5.8</version> 
</dependency> 

ExpiringMap<String,String> map=ExpiringMap.builder()
        .maxSize(100)
            .expiration(1, TimeUnit.SECONDS)
            .expirationPolicy(ExpirationPolicy.ACCESSED)
            .variableExpiration()
            .build();
以下内容引用自https://www.kutu66.com//GitHub/article_102376源代码名称:expiringmap
源代码网址:http://www.github.com/jhalterman/expiringmap
expiringmap源代码文档
expiringmap源代码下载
Git URL: 
git://www.github.com/jhalterman/expiringmap.git
Git Clone代码到本地: 
git clone http://www.github.com/jhalterman/expiringmap
Subversion代码到本地: 
$ svn co --depth empty http://www.github.com/jhalterman/expiringmap
Checked out revision 1.
$ cd repo
$ svn up trunk
ExpiringMap
Build StatusMaven CentralLicenseJavaDoc
一个高性能。低开销。零依赖。线程安全 ConcurrentMap ( ) 实现。 功能包括:
过期策略失败
变量过期时间
最大大小
过期侦听程序
迟缓输入加载项
过期自检功能
支持 Java 6 +,但文档使用lambdas实现简单。
用法
ExpiringMap允许你创建一个在某个时间段之后或者超过最大映射大小之后过期的地图:

Map<String, Connection> map =ExpiringMap.builder()
. maxSize(123)
. expiration(30, TimeUnit.SECONDS)
. build();// Expires after 30 seconds or as soon as a 124th element is added and this is the next one to expire based on the expiration policymap.put("connection", connection);过期策略
可以根据创建入口时间或者上次访问时间来发生过期:

Map<String, Connection> map =ExpiringMap.builder()
. expirationPolicy(ExpirationPolicy.ACCESSED)
. build(); 
我们还可以为单个条目指定过期策略:

map.put("connection", connection, ExpirationPolicy.CREATED);
我们可以随时改变策略:

map.setExpirationPolicy("connection", ExpirationPolicy.ACCESSED);变量过期
条目可以有单独的可变过期时间和策略:

ExpiringMap<String, Connection> map =ExpiringMap.builder()
. variableExpiration()
. build();
map.put("connection", connection, ExpirationPolicy.ACCESSED, 5, TimeUnit.MINUTES);
还可以随时更改过期时间和策略:

map.setExpiration(connection, 5, TimeUnit.MINUTES);
map.setExpirationPolicy(connection, ExpirationPolicy.ACCESSED);最大大小
也可以根据超过允许的最大大小的地图中的条目数来发生过期。 一旦到达了这个大小,添加额外的条目将会在过期策略基于过期策略的第一条条目过期。

Map<String, Connection> map =ExpiringMap.builder()
. maxSize(123)
. build(); 到期侦听器
过期的侦听器可以在条目过期时得到通知:

Map<String, Connection> map =ExpiringMap.builder()
. expirationListener((key, connection) -> connection.close())
. build();
过期侦听器被同步调用,因为条目过期,并且对地图的写操作被阻止,直到。 还可以配置异步过期侦听器,并且在不阻塞映射操作的情况下在单独的线程池中调用:

Map<String, Connection> map =ExpiringMap.builder()
. asyncExpirationListener((key, connection) -> connection.close())
. build();
还可以随时添加和删除过期侦听器:

ExpirationListener<String, Connection> connectionCloser = (key, connection) -> connection.close();
map.addExpirationListener(connectionCloser);
map.removeExpirationListener(connectionCloser);延迟输入
当调用 ExpiringMap.get 时,可以通过 EntryLoader 延迟加载条目:

Map<String, Connection> connections =ExpiringMap.builder()
. expiration(10, TimeUnit.MINUTES)
. entryLoader(address ->newConnection(address))
. build();// Loads a new connection into the map via the EntryLoaderconnections.get("jodah.net");
也可以在不同的时间使延迟加载的条目过期:

Map<String, Connection> connections =ExpiringMap.builder()
. expiringEntry(address ->newExpiringValue(newConnection(address), 5, TimeUnit.MINUTES))
. build();到期自检
ExpiringMap允许你了解一个条目什么时候过期:

long expiration = map.getExpectedExpiration("jodah.net");
我们还可以重置条目的内部过期计时器:

map.resetExpiration("jodah.net");
我们可以了解各个条目的配置到期时间:

map.getExpiration("jodah.net");
附加说明
变量过期
当禁用变量过期时( 默认值)。put 和 remove 操作具有常量的O(1) 时间复杂度。 启用变量过期时,put 和 remove 操作的时间复杂度为。
Google App Engine 集成
Google App Engine 用户必须在构造 ExpiringMap 实例之前指定 ThreadFactory,以避免运行时权限错误:

ExpiringMap.setThreadFactory(com.google.appengine.api.ThreadManager.currentRequestThreadFactory());ExpiringMap.create();
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

softwareDragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值