J'utilisais Spring Boot et je voulais implémenter un cache, alors je l'ai essayé.
Plusieurs caches sont disponibles dans Spring Boot. https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html
En regardant d'en haut, EhCache 2.x semble être facile à installer. On dit que s'il y a ehcache.xml dans le chemin de classe, il sera utilisé, donc cela semble facile à introduire, donc je vais l'essayer.
EhCache 2.x
Cette fois, appelons-le à partir de la classe annotée avec @ SpringBootApplication
.
Annoter @ EnableCaching
CacheApplication.java
@SpringBootApplication
@EnableCaching
public class CacheApplication implements CommandLineRunner {
@Autowired
Cache cache;
private final static Logger logger = LoggerFactory.getLogger(CacheApplication.class);
private final static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
public static void main(String[] args) {
SpringApplication.run(CacheApplication.class, args);
}
public void run(String[] args){
this.getValue("Être mis en cache");
this.getValue("Être mis en cache");//Être mis en cache
this.getValue("Non mis en cache car les arguments sont différents");//Non mis en cache car les arguments sont différents
this.getValue("Être mis en cache");//引数違うのを挟んでÊtre mis en cache
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.getValue("Être mis en cache");//L'argument est le même, mais il n'est pas mis en cache car il a dépassé le temps de survie
}
public void getValue(String key){
logger.info(key + " Start at: " + LocalDateTime.now().format(dateTimeFormatter));
String ret = cache.getFromCache(key); //Méthode compatible avec le cache
logger.info(ret + " End at: " + LocalDateTime.now().format(dateTimeFormatter));
}
}
Ajoutez @ Cacheable
à la méthode pour laquelle vous souhaitez activer la mise en cache
Cache.java
@Component
public class Cache {
@Cacheable("getCache") //Activer la mise en cache pour cette méthode
public String getFromCache(String key){
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "End getFromCache:" + key;
}
}
pom.xml
Ajoutez deux systèmes, spring-boot-starter-cache
et ʻehcache`, à pom.xml.
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.3</version>
</dependency>
ehcache.xml
Créez ehcache.xml sous src / main / resources /.
Définissez timeToLiveSeconds
sur 5 et définissez la durée de vie du cache sur 5 secondes.
ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir"/>
<cache
name="getCache"
timeToLiveSeconds="5"
maxEntriesLocalHeap="0">
</cache>
</ehcache>
application.properties Ajoutez les paramètres suivants à application.properties pour utiliser ehcache. Cela n'est pas nécessaire si le seul cache disponible est ehcache.
spring.cache.type=ehcache
Je le ferai. Le résultat de l'exécution est comme ça.
2020-02-29 21:29:48 -Mise en cache à partir de: 21:29:48
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51
2020-02-29 21:29:51 -Mise en cache à partir de: 21:29:51
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51
2020-02-29 21:29:51 -Non mis en cache car les arguments sont différents Commencer à: 21:29:51
2020-02-29 21:29:54 - End getFromCache:Non mis en cache car les arguments sont différents Fin à: 21:29:54
2020-02-29 21:29:54 -Mise en cache à partir de: 21:29:54
2020-02-29 21:29:54 - End getFromCache:Fin en cache à: 21:29:54
2020-02-29 21:29:57 -Mise en cache à partir de: 21:29:57
2020-02-29 21:30:00 - End getFromCache:Fin en cache à: 21:30:00
Nous verrons les résultats ci-dessous. La première fois, cela prend 3 secondes, mais la deuxième fois est un moment, donc le cache semble fonctionner.
2020-02-29 21:29:48 -Mise en cache à partir de: 21:29:48
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51
2020-02-29 21:29:51 -Mise en cache à partir de: 21:29:51
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51
Si vous passez un argument différent, il ne sera pas mis en cache, donc cela prendra encore 3 secondes.
2020-02-29 21:29:51 -Non mis en cache car les arguments sont différents Commencer à: 21:29:51
2020-02-29 21:29:54 - End getFromCache:Non mis en cache car les arguments sont différents Fin à: 21:29:54
Les éléments suivants représentent plus de 5 secondes de temps de survie, ils ne sont donc pas mis en cache et prennent 3 secondes.
2020-02-29 21:29:57 -Mise en cache à partir de: 21:29:57
2020-02-29 21:30:00 - End getFromCache:Fin en cache à: 21:30:00
Le cache se comporte comme prévu.
Je pensais que SpringBoot et EhCache2.X sont rapides car le cache ne peut être implémenté qu'avec des annotations et des fichiers de configuration. Cependant, après avoir appris que la série EhCache3 est déjà disponible, vous n'oserez peut-être pas utiliser la série EhCache2.
Quand j'ai essayé la caféine, j'ai pu implémenter le cache de la même manière, donc il semble que je puisse aussi l'utiliser. L'article suivant a été utile. https://qiita.com/yut_arrows/items/4b664acdfa852c0bd6cd
Recommended Posts