ExpiringMap用法详解

时间:2025-03-23 09:59:08
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 

<!-- /artifact//expiringmap --> 
<dependency> 
<groupId></groupId> 
<artifactId>expiringmap</artifactId> 
<version>0.5.8</version> 
</dependency> 

3.详细介绍
3.1 设置过期时间与过期协议
    /**
    *expiration(5000,)
    *设置过期时间为5秒
    *)
    *设置过期策略为创建或更新值后
    */
    ExpiringMap<String, String> map = ().expiration(5000,)
            .expirationPolicy()
            .build();
    ("key","value");
    ("key:"+("key"));
    //等待5秒
    (5001);
    (("key"));

执行结果:

key:value
null

过期协议:。

/**
     * :在每次更新元素时,过期时间同时清零。
     * :在每次访问元素时,过期时间同时清零。
     */
    ExpiringMap<String, String> map = ().expiration(5000,)
            .expirationPolicy()
            .build();
    ("key","value");
    (("key"));
    (4000);
    ("访问map:"+("key"));
    (1001);
    (("key"));

执行结果:

value
访问map:value
null

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

ExpiringMap<String, String> map = ().expiration(5000,)
            .expirationPolicy()
            .build();
    ("key","value");
    (("key"));
    (4000);
    ("key","value2");
    ("更新map:"+("key"));
    (1001);
    (("key"));

执行结果:

value
更新map:value2
value2

过期协议:。

ExpiringMap<String, String> map = ().expiration(5000,)
            .expirationPolicy()
            .build();
    ("key","value");
    (("key"));
    (4000);
    ("访问map:"+("key"));
    (1001);
    (("key"));


执行结果:

value
访问map:value
value

3.2为Map中单个元素设置过期时间
    ExpiringMap<String, String> map = ().variableExpiration()
            .expirationPolicy()
            .build();
    ("key1","value1",,5000,);
    ("key2","value2",10000,);
    (5001);
    ("key1:"+("key1"));
    ("key2:"+("key2"));
    (5000);
    ("key2:"+("key2"));

执行结果

key1:null
key2:value2
key2:null

3.3设置Map的Maximum size
    //Maximum size设置为10个
    Map<String, String> map = ().maxSize(10)
            .build();
    //向Map中插入10个数
    for (int i = 0;i<10;i++){
        ("a:"+i,"v:"+i);
    }
    ("a:0未过期:"+("a:0"));
    ("插入a:10后");
    ("a:10","v:10");
    ("a:0过期:"+("a:0"));
    ("a:1未过期:"+"a:1");

执行结果

a:0未过期:v:0
插入a:10后
a:0过期:null
a:1未过期:a:1

3.4过期监听事件
    ExpiringMap<String,String> map = ().variableExpiration()
            .expirationListener((thekey, thevalue) -> {
                ("key:"+thekey+"过期");
    }).build();
    ("key","value", 5000, );
    (5001);
    ("key:"+("key"));
运行结果

key:key过期
key:null
1
2
也可在运行是添加/删除监听

    ExpiringMap<String,String> map = ().
            variableExpiration().
            build();
    ExpirationListener<String,String> expirationListener = ((theKey,theValue)->{
        ("过期监听事件"+"key:"+theKey+" value:"+theValue);
    });
    ("key","value",,5000,);
    //添加监听
    (expirationListener);
    (5001);
    //清除监听
    (expirationListener);
运行结果

过期监听事件key:key value:value
1
3.5懒加载
使用懒加载模式时,可以不用去向map中put对象,在调用get方法时自动去创建对象。

    class Connection {
        String ipAddress;
        public Connection(String ipAddress) {
             = ipAddress;
        }
    }

    Map<String, Connection> map = ()
            .expiration(5000, )
            .expirationListener((theKey,theValue)->{
                ("过期key:"+theKey);
            })
            .entryLoader(address -> new Connection((String) address))
            .build();
    (("127.0.0.1"));
    (5001);
执行结果:

$1Connection@b1e9b8
过期key:127.0.0.1

--------------------- 
原文:/Shandows_/article/details/78767211