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 

<!-- https://mvnrepository.com/artifact/net.jodah/expiringmap --> 
<dependency> 
<groupId>net.jodah</groupId> 
<artifactId>expiringmap</artifactId> 
<version>0.5.8</version> 
</dependency> 

3.详细介绍
3.1 设置过期时间与过期协议
    /**
    *expiration(5000,TimeUnit.MILLISECONDS)
    *设置过期时间为5秒
    *ExpirationPolicy.CREATED)
    *设置过期策略为创建或更新值后
    */
    ExpiringMap<String, String> map = 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:在每次访问元素时,过期时间同时清零。
     */
    ExpiringMap<String, String> map = 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()更新操作后:

ExpiringMap<String, String> map = 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。

ExpiringMap<String, String> map = 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中单个元素设置过期时间
    ExpiringMap<String, String> map = 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个
    Map<String, String> map = 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过期监听事件
    ExpiringMap<String,String> map = 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
1
2
也可在运行是添加/删除监听

    ExpiringMap<String,String> map = ExpiringMap.builder().
            variableExpiration().
            build();
    ExpirationListener<String,String> expirationListener = ((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
1
3.5懒加载
使用懒加载模式时,可以不用去向map中put对象,在调用get方法时自动去创建对象。

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

    Map<String, Connection> map = 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$1Connection@b1e9b8
过期key:127.0.0.1

--------------------- 
原文:https://blog.csdn.net/Shandows_/article/details/78767211 
 

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake是一个跨平台的自动化构建工具,可以用于生成各种不同类型的构建文件,包括Makefile、Visual Studio解决方案、Xcode项目等。下面是CMake的使用方法详解: 1. 安装CMake 首先需要在官网上下载并安装CMake软件。安装完成后,可以在命令行中输入cmake --version来确认是否安装成功。 2. 创建一个CMakeLists.txt文件 在项目根目录下创建一个名为CMakeLists.txt的文件,该文件是CMake的核心配置文件,定义了项目的构建规则。可以使用文本编辑器或者IDE来创建这个文件。 3. 设置项目信息 在CMakeLists.txt文件中,需要设置项目的基本信息,包括项目名称、版本号、语言等。这可以通过使用project命令来实现。例如: ``` project(MyProject VERSION 1.0 LANGUAGES CXX) ``` 这里设置了项目名称为MyProject,版本号为1.0,使用C++作为编程语言。 4. 定义源文件 在CMakeLists.txt文件中,需要定义项目的源文件。可以使用add_executable或add_library命令来添加源文件。例如: ``` add_executable(myapp main.cpp) ``` 这里添加了一个名为myapp的可执行文件,它的源文件是main.cpp。 5. 添加依赖库 如果项目依赖于其他库,需要使用find_package或者add_subdirectory命令来添加依赖库。例如: ``` find_package(Boost REQUIRED COMPONENTS filesystem system) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(myapp ${Boost_LIBRARIES}) ``` 这里添加了一个名为Boost的库,它的组件是filesystem和system。 6. 设置编译选项 在CMakeLists.txt文件中还可以设置编译选项,例如编译标志、链接标志等。可以使用target_compile_options和target_link_libraries命令来设置编译选项。例如: ``` target_compile_options(myapp PRIVATE -Wall -Wextra) target_link_libraries(myapp pthread) ``` 这里设置了编译标记为-Wall和-Wextra,链接标记为pthread。 7. 构建项目 完成以上步骤后,就可以使用cmake命令来生成构建文件,例如: ``` mkdir build cd build cmake .. ``` 这里在项目根目录下创建了一个build目录,并在其中使用cmake命令生成Makefile文件。 最后,使用make命令来编译和构建项目。例如: ``` make ``` 这里编译和构建了项目,并生成myapp可执行文件。 以上就是CMake的使用方法详解。通过CMake,可以方便地管理项目的构建过程,实现跨平台的构建。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值