Using CacheLoader, you can specify business logic to load the values into the cache if those are not already exists in the cache.
Example
LoadingCache<Integer, Employee> cache = Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).maximumSize(100)
.build(key -> EmployeeService.getEmployee(key));
Above snippet builds a cache, which either returns an already-loaded value for a given key or atomically computes or retrieves it using the supplied CacheLoader.
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 + "]";
}
}
App.java
package com.sample.app;
import java.util.concurrent.TimeUnit;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import com.sample.app.model.Employee;
import com.sample.app.service.EmployeeService;
public class App {
public static void main(String args[]) {
LoadingCache<Integer, Employee> cache = Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).maximumSize(100)
.build(key -> EmployeeService.getEmployee(key));
Employee emp1 = new Employee(1, "Krishna", "Gurram");
Employee emp2 = new Employee(2, "Gopi", "Battu");
Employee emp3 = new Employee(3, "Saurav", "Sarkar");
cache.put(emp1.getId(), emp1);
cache.put(emp2.getId(), emp2);
cache.put(emp3.getId(), emp3);
System.out.println("Retrieving the employee information with id 1");
Employee emp = cache.get(1);
System.out.println(emp);
System.out.println("\nRetrieving the employee information with id 4");
emp = cache.get(4);
System.out.println(emp);
}
}
Output
Retrieving the employee information with id 1 Employee [id=1, firstName=Krishna, lastName=Gurram] Retrieving the employee information with id 4 Loading from database..... Employee [id=4, firstName=first_name_4, lastName=last_name_4]
No comments:
Post a Comment