Using AsyncLoadingCache, you can load the non-existed data to the cache asynchronously.
Example
AsyncLoadingCache<Integer, Employee> cache = Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS)
.maximumSize(100).buildAsync(key -> EmployeeService.getEmployee(key));
Extract the data from cache asynchronously
cache.get(1).thenAccept(data -> System.out.println(data));
Find the below working application.
Employee.java
package com.sample.app.model;
public class Employee {
private int id;
private String firstName;
private String lastName;
public Employee(int id, String firstName, String lastName) {
super();
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
EmployeeService.java
package com.sample.app.service;
import com.sample.app.model.Employee;
public class EmployeeService {
public static Employee getEmployee(int id){
System.out.println("Loading from database.....");
return new Employee(id, "first_name_"+ id, "last_name_"+id);
}
}
App.java
package com.sample.app;
import java.util.concurrent.TimeUnit;
import com.github.benmanes.caffeine.cache.AsyncLoadingCache;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.sample.app.model.Employee;
import com.sample.app.service.EmployeeService;
public class App {
public static void main(String args[]) {
AsyncLoadingCache<Integer, Employee> cache = Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS)
.maximumSize(100).buildAsync(key -> EmployeeService.getEmployee(key));
cache.get(1).thenAccept(data -> System.out.println(data));
System.out.println("\nGetting the data from cache again");
cache.get(1).thenAccept(data -> System.out.println(data));
}
}
Output
Loading from database..... Employee [id=1, firstName=first_name_1, lastName=last_name_1] Getting the data from cache again Employee [id=1, firstName=first_name_1, lastName=last_name_1]
Previous Next Home
No comments:
Post a Comment