91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java內存緩存-通過Google Guava創建緩存

發布時間:2020-07-28 13:24:07 來源:網絡 閱讀:632 作者:流體石頭 欄目:編程語言

谷歌Guava緩存

Guava介紹

Guava是Google guava中的一個內存緩存模塊,用于將數據緩存到JVM內存中。實際項目開發中經常將一些公共或者常用的數據緩存起來方便快速訪問。

Java內存緩存-通過Google Guava創建緩存

Guava Cache是單個應用運行時的本地緩存。它不把數據存放到文件或外部服務器。如果不符合需求,可以選擇Memcached、Redis等工具。

小案例

pom.xml添加guava依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>me.xueyao.cache</groupId>
    <artifactId>java-demo</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <dependency>
            <groupId>javax.cache</groupId>
            <artifactId>cache-api</artifactId>
            <version>1.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>27.0.1-jre</version>
        </dependency>
    </dependencies>
</project>

GuavaCacheDemo.java 代碼如下:

package me.xueyao.cache.java.guava;

import com.google.common.cache.*;
import me.xueyao.cache.java.pojo.User;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

/**
 * @author simon
 * https://github.com/google/guava
 */
public class GuavaCacheDemo {
    public static void main(String[] args) throws ExecutionException {
        //緩存接口這里是LoadingCache,LoadingCache在緩存項不存在時可以自動加載緩存
        LoadingCache<String, User> userCache
                //CacheBuilder的構造函數是私有的,只能通過其靜態方法newBuilder()來獲得CacheBuilder的實例
                = CacheBuilder.newBuilder()
                //設置并發級別為8,并發級別是指可以同時寫緩存的線程數
                .concurrencyLevel(8)
                //設置寫緩存后8秒鐘過期
                .expireAfterWrite(8, TimeUnit.SECONDS)
                //設置寫緩存后1秒鐘刷新
                .refreshAfterWrite(1, TimeUnit.SECONDS)
                //設置緩存容器的初始容量為5
                .initialCapacity(5)
                //設置緩存最大容量為100,超過100之后就會按照LRU最近雖少使用算法來移除緩存項
                .maximumSize(100)
                //設置要統計緩存的命中率
                .recordStats()
                //設置緩存的移除通知
                .removalListener(new RemovalListener<Object, Object>() {
                    @Override
                    public void onRemoval(RemovalNotification<Object, Object> notification) {
                        System.out.println(notification.getKey() + " 被移除了,原因: " + notification.getCause());
                    }
                })
                //build方法中可以指定CacheLoader,在緩存不存在時通過CacheLoader的實現自動加載緩存
                .build(
                        new CacheLoader<String, User>() {
                            @Override
                            public User load(String key) throws Exception {
                                System.out.println("緩存沒有時,從數據庫加載" + key);
                                return new User("tony" + key, key);
                            }
                        }
                );

        // 第一次讀取
        for (int i = 0; i < 10; i++) {
            User user = userCache.get("uid" + i);
            System.out.println(user);
        }

        // 第二次讀取
        for (int i = 0; i < 10; i++) {
            User user = userCache.get("uid" + i);
            System.out.println(user);
        }
        System.out.println("cache stats:");
        //最后打印緩存的命中率等 情況
        System.out.println(userCache.stats().toString());
    }
}

User.java 代碼如下:


package me.xueyao.cache.java.pojo;

import java.io.Serializable;

/**

  • @author simon
    */
    public class User implements Serializable {
    private String userName;
    private String userId;

    public User(String userName, String userId) {
    this.userName = userName;
    this.userId = userId;
    }

    public String getUserId() {
    return userId;
    }

    public void setUserId(String userId) {
    this.userId = userId;
    }

    public String getUserName() {
    return userName;
    }

    @Override
    public String toString() {
    return userId + " --- " + userName;
    }
    }

運行后的結果如下:

Java內存緩存-通過Google Guava創建緩存

第一次循環時緩存中沒有數據,構建了緩存,第二次直接命中緩存。如果程序需要單機內存緩存,可以用該方式構建緩存。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广安市| 公安县| 精河县| 北安市| 桦南县| 富锦市| 本溪市| 洱源县| 五莲县| 囊谦县| 旺苍县| 交口县| 桑日县| 彭水| 贵溪市| 敦煌市| 洞头县| 安岳县| 甘德县| 南投市| 天祝| 弋阳县| 赤壁市| 咸丰县| 那坡县| 云南省| 三亚市| 丹巴县| 通山县| 浮山县| 凤冈县| 资兴市| 河曲县| 罗江县| 高淳县| 富源县| 哈尔滨市| 兴仁县| 鄂托克旗| 萝北县| 嘉黎县|