欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中的ExpiringMap代碼實例

 更新時間:2023年08月28日 09:25:03   作者:yzm4399  
這篇文章主要介紹了SpringBoot中的ExpiringMap代碼實例,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語句

    談談Java中try-catch-finally中的return語句

    我們知道return語句用在某一個方法中,一是用于返回函數(shù)的執(zhí)行結果,二是用于返回值為void類型的函數(shù)中,僅僅是一個return語句(return ;),此時用于結束方法的執(zhí)行,也即此return后的語句將不會被執(zhí)行,當然,這種情況下return語句后不能再有其它的語句了
    2016-01-01
  • spring boot的健康檢查HealthIndicators實戰(zhàn)

    spring boot的健康檢查HealthIndicators實戰(zhàn)

    這篇文章主要介紹了spring boot的健康檢查HealthIndicators實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java應用程序CPU100%問題排查優(yōu)化實戰(zhàn)

    Java應用程序CPU100%問題排查優(yōu)化實戰(zhàn)

    這篇文章主要介紹了如何排查和優(yōu)化Java應用程序CPU使用率達到100%的問題,文中通過代碼示例和圖文結合的方式講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2025-02-02
  • Maven如何解決添加依賴之后沒有加載jar包報錯問題

    Maven如何解決添加依賴之后沒有加載jar包報錯問題

    這篇文章主要介紹了Maven如何解決添加依賴之后沒有加載jar包報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java Class.forName()用法和newInstance()方法原理解析

    Java Class.forName()用法和newInstance()方法原理解析

    這篇文章主要介紹了Java Class.forName()用法和newInstance()方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • springboot大文件上傳、分片上傳、斷點續(xù)傳、秒傳的實現(xiàn)

    springboot大文件上傳、分片上傳、斷點續(xù)傳、秒傳的實現(xiàn)

    本文主要介紹了springboot大文件上傳、分片上傳、斷點續(xù)傳、秒傳的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • SpringBoot整合Hutool實現(xiàn)文件上傳的使用示例

    SpringBoot整合Hutool實現(xiàn)文件上傳的使用示例

    文件上傳在項目經常會用到,本文主要介紹了SpringBoot整合Hutool實現(xiàn)文件上傳的使用示例,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java基礎之Web服務器與Http詳解

    Java基礎之Web服務器與Http詳解

    無論你是前端開發(fā)者還是后端開發(fā)者,以及測試工程師,這篇文章的知識都是你需要弄懂的。讀完這一篇文章,將全面弄懂 HTTP 協(xié)議、TCP 協(xié)議,面試官再也難不倒你相關知識
    2021-09-09
  • Java獲取本機IP地址的方法代碼示例(內網、公網)

    Java獲取本機IP地址的方法代碼示例(內網、公網)

    在IT領域獲取本機IP地址是一項基礎但重要的任務,特別是在網絡編程、遠程協(xié)作和設備通信中,這篇文章主要給大家介紹了關于Java獲取本機IP地址的方法(內網、公網),需要的朋友可以參考下
    2024-07-07
  • druid配置數(shù)據庫連接使用密文密碼方式

    druid配置數(shù)據庫連接使用密文密碼方式

    這篇文章主要介紹了druid配置數(shù)據庫連接使用密文密碼方式,具有很好的參考價值,希望對大家有所幫助,
    2023-12-12

最新評論