0
点赞
收藏
分享

微信扫一扫

Guava系列:LoadingCache使用方法

目标践行者 2022-01-31 阅读 97


目录

​​场景​​

​​demo​​

场景

基于内存LoadingCache缓存数据


demo

package com.nio4444.demo;

import com.google.common.base.MoreObjects;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import lombok.AllArgsConstructor;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class LoadingCacheDemo {
public static void main(String[] args) {
LoadingCache cache =
CacheBuilder.newBuilder()
.maximumSize(30) //最多缓存30个元素
.expireAfterAccess(3, TimeUnit.SECONDS) //最多缓存3s
.build(new CacheLoader<String,Employee>() {
@Override
public Employee load(String key) throws Exception {
return getFromDatabase(key);
}
}) ;

try{

System.out.println("-----------sleep before--------------");
System.out.println(" "+cache.get("103"));
System.out.println(" "+cache.get("100"));
System.out.println(" "+cache.get("103"));


Thread.sleep(3*1000);
System.out.println("-----------sleep after-------------");
System.out.println(" "+cache.get("103"));
System.out.println(" "+cache.get("110"));
}catch (Exception e){
e.printStackTrace();
}

}


private static Employee getFromDatabase(String empId){
Employee e1 = new Employee("Mahesh", "Finance", "100");
Employee e2 = new Employee("Rohan", "IT", "103");
Employee e3 = new Employee("Sohan", "Admin", "110");

Map database = new HashMap();
database.put("100", e1);
database.put("103", e2);
database.put("110", e3);
System.out.println("@数据库查询" + empId);
return (Employee) database.get(empId);
}

}

@AllArgsConstructor
class Employee {
String name;
String dept;
String emplD;

@Override
public String toString() {
return MoreObjects.toStringHelper(Employee.class)
.add("Name", name)
.add("Department", dept)
.add("Emp Id", emplD).toString();
}

}

Guava系列:LoadingCache使用方法_缓存



举报

相关推荐

0 条评论