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

SpringBoot中的ExpiringMap代碼實(shí)例

 更新時(shí)間:2023年08月28日 09:25:03   作者:yzm4399  
這篇文章主要介紹了SpringBoot中的ExpiringMap代碼實(shí)例,ExpiringMap是一個(gè)可以設(shè)置過期策略、可變條目過期、延遲條目加載和過期偵聽器的線程安全存儲(chǔ)容器,需要的朋友可以參考下

1、簡(jiǎn)介

ExpiringMap是一個(gè)可以設(shè)置過期策略、可變條目過期、延遲條目加載和過期偵聽器的線程安全存儲(chǔ)容器。

2、引入依賴

<dependency>
    <groupId>net.jodah</groupId>
    <artifactId>expiringmap</artifactId>
    <version>0.5.8</version>
</dependency>

3、過期時(shí)間

    private static void demo01() throws InterruptedException {
        ExpiringMap<String, Object> map = ExpiringMap.builder()
                // 過期時(shí)間: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("超過過期時(shí)間,自動(dòng)刪除");
    }

在這里插入圖片描述

4、重置過期時(shí)間

    private static void demo01_2() throws InterruptedException {
        ExpiringMap<String, Object> map = ExpiringMap.builder()
                // 允許映射條目具有單獨(dú)的到期日,并允許更改到期日
                //.variableExpiration()
                // 過期時(shí)間: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重置過期時(shí)間
                map.setExpiration("name", 5000, TimeUnit.MILLISECONDS);
            }
        }
        log.info("超過過期時(shí)間,自動(dòng)刪除");
    }

未啟用variableExpiration

在這里插入圖片描述

啟用variableExpiration

在這里插入圖片描述

5、過期策略

ExpirationPolicy.ACCESSED:訪問或更新元素時(shí),重置過期時(shí)間(即過期時(shí)間重新從零計(jì)算)

ExpirationPolicy.CREATED:創(chuàng)建或更新元素時(shí),重置過期時(shí)間。默認(rèn)策略。

    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);
    }

在這里插入圖片描述

經(jīng)測(cè)試,

  • ACCESSED過期策略:調(diào)用get、put、replace等方法時(shí),都會(huì)重置過期時(shí)間;
  • CREATED過期策略:調(diào)用put、replace等方法時(shí),會(huì)重置過期時(shí)間,get不會(huì)。

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、單個(gè)元素配置

    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);
        }
    }

到此這篇關(guān)于SpringBoot中的ExpiringMap代碼實(shí)例的文章就介紹到這了,更多相關(guān)SpringBoot的ExpiringMap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 談?wù)凧ava中try-catch-finally中的return語(yǔ)句

    談?wù)凧ava中try-catch-finally中的return語(yǔ)句

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

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

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

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

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

    Maven如何解決添加依賴之后沒有加載jar包報(bào)錯(cuò)問題

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

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

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

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

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

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

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

    Java基礎(chǔ)之Web服務(wù)器與Http詳解

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

    Java獲取本機(jī)IP地址的方法代碼示例(內(nèi)網(wǎng)、公網(wǎng))

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

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

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

最新評(píng)論