Guava
依赖
<!--Guava Cache-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.2-jre</version>
</dependency>
Guava Cache创建方式
GuavaCache有两种创建方式: CacheLoader和Callable callback
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.lg.guava.demo.Constants;
import java.util.Iterator;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
public class Demo {
/**
* 初始化缓存三个
*/
public static void initCache(LoadingCache<String,Object> cache) throws Exception {
for(int i=1;i<=3;i++){
//连接数据源 如果缓存没有则读取数据源
cache.get(String.valueOf(i));
}
}
/**
* 显示缓存里的数据
* @param cache
*/
public static void display(LoadingCache<String,Object> cache){
//利用迭代器
Iterator its=cache.asMap().entrySet().iterator();
while(its.hasNext()){
System.out.println(its.next().toString());
}
}
/**
* 读取缓存数据 如果没有则回调源数据并(自动)写入缓存
* @param key
* @param cache
*/
public static void get(String key,LoadingCache<String,Object> cache) throws Exception {
cache.get(key, new Callable<Object>() {
@Override //回调方法用于读源并写入缓存
public Object call() throws Exception {
//读源
Object value=Constants.hm.get(key);
//写回缓存
// cache.put(key,value);
return value;
}
});
}
public static void main(String[] args) throws Exception {
//CacheLoader的方式创建
LoadingCache<String,Object> cache= CacheBuilder.newBuilder().build(new CacheLoader<String, Object>() {
//读取数据源
@Override
public Object load(String key) throws Exception {
return Constants.map.get(key);
}
});
//初始化缓存
initCache(cache);
System.out.println(cache.size());
//显示缓存数据
display(cache);
//读取4
get("4",cache);
System.out.println("==================================");
display(cache);
}
}
public final class Constants {
/**
* 模拟数据源
*/
public static Map<String,String> map=new HashMap();
static {
map.put("1","张飞");
map.put("2","赵云");
map.put("3","马超");
map.put("4","关羽");
map.put("5","黄忠");
}
}
CacheLoader
在创建cache对象时,采用CacheLoader来获取数据,当缓存不存在时能够自动加载数据到缓存中。
//CacheLoader的方式创建
LoadingCache<String,Object> cache= CacheBuilder.newBuilder().build(new CacheLoader<String, Object>() {
//读取数据源
@Override
public Object load(String key) throws Exception {
return Constants.map.get(key);
}
});
Callable Callback
/**
* 读取缓存数据 如果没有则回调源数据并(自动)写入缓存
* @param key
* @param cache
*/
public static void get(String key,LoadingCache<String,Object> cache) throws Exception {
cache.get(key, new Callable<Object>() {
@Override //回调方法用于读源并写入缓存
public Object call() throws Exception {
//读源
Object value=Constants.map.get(key);
//写回缓存
// cache.put(key,value);
return value;
}
});
}