java 懒加载map_ExpiringMap用法详解

ExpiringMap用法详解

ExpiringMap用法详解

功能简介

使用说明

详细介绍

1 设置过期时间与过期协议

2为Map中单个元素设置过期时间

3设置Map的Maximum size

4过期监听事件

5懒加载

1.功能简介

1.可设置Map中的Entry在一段时间后自动过期。

2.可设置Map最大容纳值,当到达Maximum size后,再次插入值会导致Map中的第一个值过期。

3.可添加监听事件,在监听到Entry过期时调度监听函数。

4.可以设置懒加载,在调用get()方法时创建对象。

2.使用说明

Github地址

Maven

net.jodah

expiringmap

0.5.8

3.详细介绍

3.1 设置过期时间与过期协议

/**

*expiration(5000,TimeUnit.MILLISECONDS)

*设置过期时间为5秒

*ExpirationPolicy.CREATED)

*设置过期策略为创建或更新值后

*/

ExpiringMapmap = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)

.expirationPolicy(ExpirationPolicy.CREATED)

.build();

map.put("key","value");

System.out.println("key:"+map.get("key"));

//等待5秒

Thread.sleep(5001);

System.out.println(map.get("key"));

执行结果:

key:value

null

过期协议:ExpirationPolicy.CREATED。

/**

* ExpirationPolicy.CREATED:在每次更新元素时,过期时间同时清零。

* ExpirationPolicy.ACCESSED:在每次访问元素时,过期时间同时清零。

*/

ExpiringMapmap = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)

.expirationPolicy(ExpirationPolicy.CREATED)

.build();

map.put("key","value");

System.out.println(map.get("key"));

Thread.sleep(4000);

System.out.println("访问map:"+map.get("key"));

Thread.sleep(1001);

System.out.println(map.get("key"));

执行结果:

value

访问map:value

null

在过期时间内调用map.put(),map.replace()更新操作后:

ExpiringMapmap = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)

.expirationPolicy(ExpirationPolicy.CREATED)

.build();

map.put("key","value");

System.out.println(map.get("key"));

Thread.sleep(4000);

map.put("key","value2");

System.out.println("更新map:"+map.get("key"));

Thread.sleep(1001);

System.out.println(map.get("key"));

执行结果:

value

更新map:value2

value2

过期协议:ExpirationPolicy.ACCESSED。

ExpiringMapmap = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)

.expirationPolicy(ExpirationPolicy.ACCESSED)

.build();

map.put("key","value");

System.out.println(map.get("key"));

Thread.sleep(4000);

System.out.println("访问map:"+map.get("key"));

Thread.sleep(1001);

System.out.println(map.get("key"));

执行结果:

value

访问map:value

value

3.2为Map中单个元素设置过期时间

ExpiringMapmap = ExpiringMap.builder().variableExpiration()

.expirationPolicy(ExpirationPolicy.CREATED)

.build();

map.put("key1","value1",ExpirationPolicy.ACCESSED,5000,TimeUnit.MILLISECONDS);

map.put("key2","value2",10000,TimeUnit.MILLISECONDS);

Thread.sleep(5001);

System.out.println("key1:"+map.get("key1"));

System.out.println("key2:"+map.get("key2"));

Thread.sleep(5000);

System.out.println("key2:"+map.get("key2"));

执行结果

key1:null

key2:value2

key2:null

3.3设置Map的Maximum size

//Maximum size设置为10个

Mapmap = ExpiringMap.builder().maxSize(10)

.build();

//向Map中插入10个数

for (int i = 0;i<10;i++){

map.put("a:"+i,"v:"+i);

}

System.out.println("a:0未过期:"+map.get("a:0"));

System.out.println("插入a:10后");

map.put("a:10","v:10");

System.out.println("a:0过期:"+map.get("a:0"));

System.out.println("a:1未过期:"+"a:1");

执行结果

a:0未过期:v:0

插入a:10后

a:0过期:null

a:1未过期:a:1

3.4过期监听事件

ExpiringMapmap = ExpiringMap.builder().variableExpiration()

.expirationListener((thekey, thevalue) -> {

System.out.println("key:"+thekey+"过期");

}).build();

map.put("key","value", 5000, TimeUnit.MILLISECONDS);

Thread.sleep(5001);

System.out.println("key:"+map.get("key"));

运行结果

key:key过期

key:null

也可在运行是添加/删除监听

ExpiringMapmap = ExpiringMap.builder().

variableExpiration().

build();

ExpirationListenerexpirationListener = ((theKey,theValue)->{

System.out.println("过期监听事件"+"key:"+theKey+" value:"+theValue);

});

map.put("key","value",ExpirationPolicy.CREATED,5000,TimeUnit.MILLISECONDS);

//添加监听

map.addExpirationListener(expirationListener);

Thread.sleep(5001);

//清除监听

map.removeExpirationListener(expirationListener);

运行结果

过期监听事件key:key value:value

3.5懒加载

使用懒加载模式时,可以不用去向map中put对象,在调用get方法时自动去创建对象。

class Connection {

String ipAddress;

public Connection(String ipAddress) {

this.ipAddress = ipAddress;

}

}

Mapmap = ExpiringMap.builder()

.expiration(5000, TimeUnit.MILLISECONDS)

.expirationListener((theKey,theValue)->{

System.out.println("过期key:"+theKey);

})

.entryLoader(address -> new Connection((String) address))

.build();

System.out.println(map.get("127.0.0.1"));

Thread.sleep(5001);

执行结果:

com.zhizhou.netty.SocketChannelMapTest[email protected]

过期key:127.0.0.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值