Tuesday 27 April 2021

Caffeine: LoadingCache: Load the value from CacheLoader

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]

 

 

 

 

 

 

 

 

Previous                                                    Next                                                    Home

No comments:

Post a Comment