SpringBoot中的ExpiringMap代码实例
1、简介
ExpiringMap是一个可以设置过期策略、可变条目过期、延迟条目加载和过期侦听器的线程安全存储容器。
2、引入依赖
<dependency>
<groupId>net.jodah</groupId>
<artifactId>expiringmap</artifactId>
<version>0.5.8</version>
</dependency>3、过期时间
private static void demo01() throws InterruptedException {
ExpiringMap<String, Object> map = ExpiringMap.builder()
// 过期时间:5000,单位毫秒
.expiration(5000, TimeUnit.MILLISECONDS)
.build();
log.info("添加元素");
map.put("name", "yzm");
while (map.containsKey("name")) {
log.info("name = " + map.get("name"));
Thread.sleep(1000);
}
log.info("超过过期时间,自动删除");
}
4、重置过期时间
private static void demo01_2() throws InterruptedException {
ExpiringMap<String, Object> map = ExpiringMap.builder()
// 允许映射条目具有单独的到期日,并允许更改到期日
//.variableExpiration()
// 过期时间:5000,单位毫秒
.expiration(5000, TimeUnit.MILLISECONDS)
.build();
log.info("添加元素");
map.put("name", "yzm");
int count = 0;
while (map.containsKey("name")) {
count++;
log.info("name = " + map.get("name"));
Thread.sleep(1000);
if (count == 4) {
//指定key重置过期时间
map.setExpiration("name", 5000, TimeUnit.MILLISECONDS);
}
}
log.info("超过过期时间,自动删除");
}未启用variableExpiration

启用variableExpiration

5、过期策略
ExpirationPolicy.ACCESSED:访问或更新元素时,重置过期时间(即过期时间重新从零计算)
ExpirationPolicy.CREATED:创建或更新元素时,重置过期时间。默认策略。
private static void demo02() throws InterruptedException {
ExpiringMap<String, Object> map = ExpiringMap.builder()
.variableExpiration()
.expiration(5000, TimeUnit.MILLISECONDS)
.expirationPolicy(ExpirationPolicy.ACCESSED)
.build();
log.info("添加元素");
map.put("name", "yzm");
int count = 0;
while (map.containsKey("name")) {
count++;
log.info("name = " + map.get("name"));
Thread.sleep(1000);
if (count > 10) {
break;
}
}
log.info("count:" + count);
}
private static void demo02() throws InterruptedException {
ExpiringMap<String, Object> map = ExpiringMap.builder()
.variableExpiration()
.expiration(5000, TimeUnit.MILLISECONDS)
.expirationPolicy(ExpirationPolicy.ACCESSED)
.build();
log.info("添加元素");
map.put("name", "yzm");
int count = 0;
while (map.containsKey("name")) {
count++;
//log.info("name = " + map.get("name"));
Thread.sleep(1000);
if (count == 4) {
map.replace("name", "Yzm");
}
}
log.info("count:" + count);
}
经测试,
- ACCESSED过期策略:调用get、put、replace等方法时,都会重置过期时间;
- CREATED过期策略:调用put、replace等方法时,会重置过期时间,get不会。
6、容器最大值
超过最大值,最早的元素被移除
private static void demo03() throws InterruptedException {
ExpiringMap<Integer, Object> map = ExpiringMap.builder()
.maxSize(5)
.build();
for (int i = 1; i <= 10; i++) {
map.put(i, i);
System.out.println(map.keySet());
Thread.sleep(1000);
}
}
7、过期侦听器
private static void demo04() throws InterruptedException {
ExpiringMap<String, Object> map = ExpiringMap.builder()
.expiration(3000, TimeUnit.MILLISECONDS)
// 同步通知
.expirationListener(((key, value) -> log.info("触发过期侦听器:" + key + " = " + value)))
// 异步通知
.asyncExpirationListener(((key, value) -> log.info("触发过期侦听器:" + key + " = " + value)))
.build();
log.info("添加元素");
map.put("name", "yzm");
map.put("name2", "yzm2");
map.put("name3", "yzm3");
Thread.sleep(10000);
}
8、单个元素配置
private static void demo05() throws InterruptedException {
ExpiringMap<String, Object> map = ExpiringMap.builder().variableExpiration().build();
map.put("key", "value", ExpirationPolicy.CREATED, 3, TimeUnit.SECONDS);
while (map.containsKey("key")) {
log.info("key = " + map.get("key"));
Thread.sleep(1000);
}
}到此这篇关于SpringBoot中的ExpiringMap代码实例的文章就介绍到这了,更多相关SpringBoot的ExpiringMap内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
谈谈Java中try-catch-finally中的return语句
我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种情况下return语句后不能再有其它的语句了2016-01-01
spring boot的健康检查HealthIndicators实战
这篇文章主要介绍了spring boot的健康检查HealthIndicators实战,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10
Java Class.forName()用法和newInstance()方法原理解析
这篇文章主要介绍了Java Class.forName()用法和newInstance()方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-08-08
springboot大文件上传、分片上传、断点续传、秒传的实现
本文主要介绍了springboot大文件上传、分片上传、断点续传、秒传的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-07-07


最新评论