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!
java google guava maven loadingcache cacheloader
Commentami!