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

SpringBoot中的ExpiringMap代碼實例

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

1、簡介

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

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

在這里插入圖片描述

經(jīng)測試,

  • ACCESSED過期策略:調(diào)用get、put、replace等方法時,都會重置過期時間;
  • CREATED過期策略:調(diào)用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);
        }
    }

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

相關(guān)文章

最新評論