Java内存缓存-通过Google Guava创建缓存
生活随笔
收集整理的這篇文章主要介紹了
Java内存缓存-通过Google Guava创建缓存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
谷歌Guava緩存
Guava介紹
Guava是Google guava中的一個內存緩存模塊,用于將數據緩存到JVM內存中。實際項目開發中經常將一些公共或者常用的數據緩存起來方便快速訪問。
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>() {@Overridepublic void onRemoval(RemovalNotification<Object, Object> notification) {System.out.println(notification.getKey() + " 被移除了,原因: " + notification.getCause());}})//build方法中可以指定CacheLoader,在緩存不存在時通過CacheLoader的實現自動加載緩存.build(new CacheLoader<String, User>() {@Overridepublic 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;}@Overridepublic String toString() {return userId + " --- " + userName;} }運行后的結果如下:
第一次循環時緩存中沒有數據,構建了緩存,第二次直接命中緩存。如果程序需要單機內存緩存,可以用該方式構建緩存。
轉載于:https://www.cnblogs.com/loveyous/p/11403717.html
總結
以上是生活随笔為你收集整理的Java内存缓存-通过Google Guava创建缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP/IP协议 和 如何实现 互联网上
- 下一篇: 改变 input[type=range