Tuesday 27 April 2021

Caffeine cache: Load not found values automatically

Cache interface provides ‘get’ method, which takes a mapping function as argument. This method return the value if it is exist in the cache, else get the value from mapping function, store the value in cache and return it.

 

Signature

V get(K key, Function<? super K, ? extends @PolyNull V> mappingFunction)

 

If the specified key is not already associated with a value, attempts to compute its value using the given mapping function and enters it into this cache unless null.

 

Example

Employee emp = cache.get(1, key -> EmployeeService.getEmployee(key));

 

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.Cache;
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[]) {
    Cache<Integer, Employee> cache = Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).maximumSize(100)
        .build();

    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, key -> EmployeeService.getEmployee(key));
    System.out.println(emp);

    System.out.println("\nRetrieving the employee information with id 4");
    emp = cache.get(4, key -> EmployeeService.getEmployee(key));
    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
Employee [id=4, firstName=first_name_4, lastName=last_name_4]

 

 

 

 

 

 

 

Previous                                                    Next                                                    Home

No comments:

Post a Comment