目录
场景
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();
}
}