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:創(chuàng)建或更新元素時,重置過期時間。默認策略。
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("觸發(fā)過期偵聽器:" + key + " = " + value)))
// 異步通知
.asyncExpirationListener(((key, value) -> log.info("觸發(fā)過期偵聽器:" + 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內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot+Spring Security實現前后端分離登錄認證及權限控制的示例代碼
本文主要介紹了Springboot+Spring Security實現前后端分離登錄認證及權限控制的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
Springboot項目使用html5的video標簽完成視頻播放功能
這篇文章主要介紹了Springboot項目使用html5的video標簽完成視頻播放功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
springcloud?eureka切換nacos的配置方法
這篇文章主要介紹了springcloud?eureka切換nacos,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01

