Utilizzare la cache in Java con Google Guava

Mattepuffo's logo
Utilizzare la cache in Java con Google Guava

Utilizzare la cache in Java con Google Guava

Google Guava è una libreria per Java con diverse utilità.

Oggi vediamo come usare le utilità di caching!

Se usate Maven aggiungete questa dipendenza:

        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>27.0-jre</version>
        </dependency>

Cominciamo con con il creare una classe POJO:

public class Persona {

    private String nome;

    public Persona(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public String toString() {
        return "Persona{" +
                "nome='" + nome + ''' +
                '}';
    }
}

Poi usiamo LoadingCache, andando a cercare i dati nel metodo cercaPersona (che si occupa anche di creare la mappa):

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) {
        LoadingCache<String, Persona> cache = CacheBuilder
                .newBuilder()
                .maximumSize(50)
                .expireAfterAccess(20, TimeUnit.MINUTES)
                .build(new CacheLoader<String, Persona>() {
                    @Override
                    public Persona load(String s) {
                        return cercaPersona(s);
                    }
                });

        try {
            // PRIMA INVOCAZIONE: RECORDS CREATI
            System.out.println(cache.get("uno"));
            System.out.println(cache.get("due"));

            // SECONDA INVOCAZIONE: DALLA CACHE
            System.out.println(cache.get("uno"));
            System.out.println(cache.get("due"));
        } catch (ExecutionException ex) {
            System.out.println(ex.getMessage());
        }
    }

    private static Persona cercaPersona(String id) {
        Persona p1 = new Persona("FEDERICA");
        Persona p2 = new Persona("GINO");
        Persona p3 = new Persona("CARLO");
        Map<String, Persona> map = new HashMap<>();
        map.put("uno", p1);
        map.put("due", p2);
        map.put("tre", p3);
        return map.get(id);
    }

}

Facciamo due invocazioni, ma nella seconda i dati vengono presi dalla cache, e non ricreati.

Enjoy!


Condividi

Commentami!