ExpiringMapの使い方の詳細


ExpiringMapの使い方の詳細
  • ExpiringMapの使い方の詳細
  • 機能概要
  • 使用説明
  • 詳細
  • 1失効時間と失効プロトコル
  • を設定する.
  • 2 Mapの単一要素の有効期限
  • を設定します.
  • 3 MapのMaximum size
  • を設定する
  • 4期限切れリスニングイベント
  • 5怠惰負荷


  • 1.機能紹介
    1.   Map  Entry          。
    2.   Map     ,   Maximum size ,        Map        。
    3.       ,    Entry         。
    4.       ,   get()       。
    

    2.使用説明
    Githubアドレス
    Maven


    net.jodah
    expiringmap
    0.5.8


    3.詳細
    3.1有効期限と有効期限の設定
        /**
        *expiration(5000,TimeUnit.MILLISECONDS)
        *       5 
        *ExpirationPolicy.CREATED)
        *              
        */
        ExpiringMap map = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)
                .expirationPolicy(ExpirationPolicy.CREATED)
                .build();
        map.put("key","value");
        System.out.println("key:"+map.get("key"));
        //  5 
        Thread.sleep(5001);
        System.out.println(map.get("key"));

    実行結果:
    key:value
    null

    期限切れプロトコル:ExpirationPolicy.CREATED.
    /**
         * ExpirationPolicy.CREATED:        ,        。
         * ExpirationPolicy.ACCESSED:        ,        。
         */
        ExpiringMap map = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)
                .expirationPolicy(ExpirationPolicy.CREATED)
                .build();
        map.put("key","value");
        System.out.println(map.get("key"));
        Thread.sleep(4000);
        System.out.println("  map:"+map.get("key"));
        Thread.sleep(1001);
        System.out.println(map.get("key"));

    実行結果:
    value
      map:value
    null

    期限切れにmapを呼び出す.put(),map.replace()更新操作後:
    ExpiringMap map = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)
                .expirationPolicy(ExpirationPolicy.CREATED)
                .build();
        map.put("key","value");
        System.out.println(map.get("key"));
        Thread.sleep(4000);
        map.put("key","value2");
        System.out.println("  map:"+map.get("key"));
        Thread.sleep(1001);
        System.out.println(map.get("key"));

    実行結果:
    value
      map:value2
    value2

    期限切れプロトコル:ExpirationPolicy.ACCESSED.
    ExpiringMap map = ExpiringMap.builder().expiration(5000,TimeUnit.MILLISECONDS)
                .expirationPolicy(ExpirationPolicy.ACCESSED)
                .build();
        map.put("key","value");
        System.out.println(map.get("key"));
        Thread.sleep(4000);
        System.out.println("  map:"+map.get("key"));
        Thread.sleep(1001);
        System.out.println(map.get("key"));

    実行結果:
    value
      map:value
    value

    3.2 Mapの単一要素の有効期限を設定する
        ExpiringMap map = ExpiringMap.builder().variableExpiration()
                .expirationPolicy(ExpirationPolicy.CREATED)
                .build();
        map.put("key1","value1",ExpirationPolicy.ACCESSED,5000,TimeUnit.MILLISECONDS);
        map.put("key2","value2",10000,TimeUnit.MILLISECONDS);
        Thread.sleep(5001);
        System.out.println("key1:"+map.get("key1"));
        System.out.println("key2:"+map.get("key2"));
        Thread.sleep(5000);
        System.out.println("key2:"+map.get("key2"));

    実行結果
    key1:null
    key2:value2
    key2:null

    3.3 MapのMaximum sizeを設定する
        //Maximum size   10 
        Map map = ExpiringMap.builder().maxSize(10)
                .build();
        // Map   10  
        for (int i = 0;i<10;i++){
            map.put("a:"+i,"v:"+i);
        }
        System.out.println("a:0   :"+map.get("a:0"));
        System.out.println("  a:10 ");
        map.put("a:10","v:10");
        System.out.println("a:0  :"+map.get("a:0"));
        System.out.println("a:1   :"+"a:1");

    実行結果
    a:0v:0
      a:10 
    a:0null
    a:1a:1

    3.4期限切れのリスニングイベント
        ExpiringMap map = ExpiringMap.builder().variableExpiration()
                .expirationListener((thekey, thevalue) -> {
                    System.out.println("key:"+thekey+"  ");
        }).build();
        map.put("key","value", 5000, TimeUnit.MILLISECONDS);
        Thread.sleep(5001);
        System.out.println("key:"+map.get("key"));
    

    実行結果
    key:key  
    key:null

    リスナーの追加/削除を実行することもできます
        ExpiringMap map = ExpiringMap.builder().
                variableExpiration().
                build();
        ExpirationListener expirationListener = ((theKey,theValue)->{
            System.out.println("      "+"key:"+theKey+" value:"+theValue);
        });
        map.put("key","value",ExpirationPolicy.CREATED,5000,TimeUnit.MILLISECONDS);
        //    
        map.addExpirationListener(expirationListener);
        Thread.sleep(5001);
        //    
        map.removeExpirationListener(expirationListener);

    実行結果
          key:key value:value

    3.5怠惰負荷
    怠惰ロードモードを使用すると、mapのputオブジェクトに行かずにgetメソッドを呼び出すときに自動的にオブジェクトを作成できます.
        class Connection {
            String ipAddress;
            public Connection(String ipAddress) {
                this.ipAddress = ipAddress;
            }
        }
    
        Map map = ExpiringMap.builder()
                .expiration(5000, TimeUnit.MILLISECONDS)
                .expirationListener((theKey,theValue)->{
                    System.out.println("  key:"+theKey);
                })
                .entryLoader(address -> new Connection((String) address))
                .build();
        System.out.println(map.get("127.0.0.1"));
        Thread.sleep(5001);

    実行結果:
    com.zhizhou.netty.SocketChannelMapTest$1Connection@b1e9b8
      key:127.0.0.1