亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

澎湖县| 呼图壁县| 楚雄市| 明溪县| 泰和县| 界首市| 葫芦岛市| 新河县| 盐池县| 辰溪县| 嘉祥县| 阿尔山市| 精河县| 全椒县| 浦北县| 闻喜县| 诏安县| 冷水江市| 壤塘县| 花莲县| 天长市| 诸暨市| 鹿邑县| 驻马店市| 什邡市| 东源县| 京山县| 建湖县| 交城县| 东兴市| 永定县| 浮梁县| 南阳市| 铅山县| 偃师市| 安吉县| 甘泉县| 子洲县| 淮北市| 高密市| 广元市|