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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
談談Java中try-catch-finally中的return語句
我們知道return語句用在某一個方法中,一是用于返回函數(shù)的執(zhí)行結果,二是用于返回值為void類型的函數(shù)中,僅僅是一個return語句(return ;),此時用于結束方法的執(zhí)行,也即此return后的語句將不會被執(zhí)行,當然,這種情況下return語句后不能再有其它的語句了2016-01-01spring boot的健康檢查HealthIndicators實戰(zhàn)
這篇文章主要介紹了spring boot的健康檢查HealthIndicators實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java應用程序CPU100%問題排查優(yōu)化實戰(zhàn)
這篇文章主要介紹了如何排查和優(yōu)化Java應用程序CPU使用率達到100%的問題,文中通過代碼示例和圖文結合的方式講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下2025-02-02Java Class.forName()用法和newInstance()方法原理解析
這篇文章主要介紹了Java Class.forName()用法和newInstance()方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08springboot大文件上傳、分片上傳、斷點續(xù)傳、秒傳的實現(xiàn)
本文主要介紹了springboot大文件上傳、分片上傳、斷點續(xù)傳、秒傳的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07SpringBoot整合Hutool實現(xiàn)文件上傳的使用示例
文件上傳在項目經常會用到,本文主要介紹了SpringBoot整合Hutool實現(xiàn)文件上傳的使用示例,具有一定的參考價值,感興趣的可以了解一下2023-11-11