English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
EhCache is an open-source cache based on Java, used to improve performance. The current version of Ehcache is 3 . It provides JSR-107 Cache manager implementation. We can use it directly.
ItFast,Lightweight, scalable和Flexible。 It allows us to executeSerializable和Object It provides such as LRU, LFU, FIFO, etc.Cache eviction policy. It will store the cache inMemory和Disk(SSD)中. It depends on SLF4J For recording. It has been fully implemented JSR-107 和 Jcache Es supporting through JGroups o JMS 和 JMS RMI per eseguire cache distribuite.utilizzalinguaggio di query fluido
EhCache utilizza modelli
Cache-as-SoR (system-of-record) La cache utilizza diversi modelli di accesso. EhCache utilizza i seguenti modelli: Read-through Write-through Write-behind
第15步: Cache-asidecache di riserva
Cache-as-SoR cache-as-SoR modalità rappresentano le operazioni di lettura e scrittura del SoR sulla cache. Riducono la responsabilità dell'applicazione. Utilizzano combinazioni di modelli di lettura e scrittura, tra cui和 lettura diretta, scrittura diretta, riducendo la difficoltà dell'applicazione. Permette alla cache di risolvere i problemi di scrittura post-lettura.
Read-throughmodalità copia anche il modello di cache riservato quando legge i dati dalla cache. La differenza tra modalità di lettura e modello di cache riservato sta nel fatto che il modello di lettura implementa CacheEntryFactory interfaccia. Indica come la cache legge gli oggetti dalla cache. È meglio impacchettare l'istanza EhCache in SelfPopulatingCache istanza.
Write-throughpuò anche copiare il modello di cache di riserva quando i dati vengono scritti nella cache. La differenza tra modalità di scrittura diretta e modello di cache di riserva sta nel fatto che il modello di scrittura diretta implementa modalità CacheWriter interfaccia. Configura la cache per modalità di scrittura diretta e post-scrittura. Scrive i dati nel SoR nella stessa thread di esecuzione.
Write-behindin diverse forme rispetto agli altri tre modelli. In ritardo configurabiledopo di che, modifica le voci della cache. Il ritardo può essere secondi, minuti, un giorno, una settimana,o per molto tempo. Allo stesso tempo, mette in coda i dati per essere scritti più tardi nella stessa thread di esecuzione.
La scrittura dei dati avviene in modalità post-write al di fuori dell'ambito delle transazioni. Questo significa che crea una nuova transazione per submittere dati diversi dal transazione principale nel SoR.
EhCache ci permette di utilizzare vari tipi di aree di archiviazione dati, come heap, disco e cluster. Possiamo configurare un cache multi-archiviazione (che utilizza più aree di archiviazione). Può essere configurato come livello.
Questi livelli sono organizzati in ordine. Il livello più basso è livello di autorizzazione, un altro livello è livello di cache. Anche conosciuta come più vicina o cache vicina. Il livello di cache può avere più aree di archiviazione. I dati più caldi sono conservati nel livello di cache perché sono più veloci rispetto al livello di autorizzazione. Confrontati con il livello di cache, altri dati sono conservati nel livello di autorizzazione, più lenti ma più ricchi.
EhCache supporta diversi tipi di archiviazione dati, tra cui quattro:
Memoria heap Off-Heap Store Disk Store Clustered Store
Memora gli elementi di cache nella memoria heap Java. Condivide lo storage con l'applicazione Java. È veloce perché utilizza il heap, ma lo spazio di archiviazione è limitato. Il garbage collector scansiona anche lo storage heap.
Usa la memoria principale (RAM) per memorizzare gli elementi di cache. Il garbage collector non lo scanna. È più lento rispetto allo storage heap perché gli elementi di cache vengono spostati nello storage heap prima dell'uso. La sua dimensione è limitata.
Usa il disco per memorizzare gli elementi di cache. È molto più lento rispetto allo storage basato su RAM (sopra e sotto lo storage). È meglio utilizzare dischi dedicati se si utilizza lo storage su disco.
Mette i record di cache sul server remoto. È più lento rispetto allo storage heap. Può avere server di failover per alta disponibilità.
L'immagine sopra mostra
Un'applicazione può avere più gestori di cache. Molte cache possono essere gestite dal gestore delle cache. Le cache possono essere memorizzate utilizzando più strati. EhCache mette i dati recentemente utilizzati o frequentemente utilizzati in uno strato più veloce (strato di cache).
Metti EhCache Configura il jar nel percorso della classe. Configura xml e mettilo nel percorso della classe. Crea un riferimento alla cache.
Nell'esempio seguente, configureremo EhCache nell'applicazione.
Passo 1: Apri Spring Initializr https://start.spring.io/.
Passo 2: Scegli la versione di Spring Boot 2.3.0 M2 。
Passo 3: Fornisce GroupNome. Abbiamo fornito il nome del gruppo com.w3codebox。
Passo 4: Fornisce Artifact. Abbiamo fornito l'Artifact spring-boot-ehcache-example.
Passo 5: Aggiungi Spring Web Dipendenze.
Passo 6: Clicca Generate (Genera) pulsante. Quando clicchiamo sul pulsante "Genera", esso impacchetta tutte le specifiche correlate all'applicazione in un Jar dal file e scaricalo sul sistema locale.
Passo 7: Estrai file jar.
Passo 8: Copia la cartella e incollala nella area di lavoro di STS.
Passo 9: ImportaProgetto.
File->Importa->Progetto Maven esistente->Avanti->Esplora->Seleziona la cartella spring-boot-ehcache-example->Seleziona la cartella->Completa
L'importazione del progetto richiede del tempo.
Passo 10: Da repository Maven https://mvnrepository.com/ e incollalo. pom.xmlfile
spring-boot-starter-cache ehcache 3 API di cache.
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <plugin> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.M2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.w3codebox</groupId> <artifactId>spring-boot-ehcache-example</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-ehcache-example</name> <description>Progetto demo per Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <artifactId>cache-api</artifactId> <plugin> <artifactId>spring-boot-starter-web</artifactId> </exclusions> <artifactId>cache-api</artifactId> <plugin> <artifactId>spring-boot-starter-cache</artifactId> </exclusions> <artifactId>cache-api</artifactId> <groupId>org.ehcache</groupId>ehcache </exclusions> <artifactId>cache-api</artifactId> <artifactId>ehcache</artifactId> <groupId>javax.cache</groupId> </exclusions> <artifactId>cache-api</artifactId> <plugin> <dependency> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <repository> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </pluginRepositories> </project>
Ora, dobbiamo configurare ehcache.xml file
Passo 11: 打开 application.properties file, e configura EhCache utilizzando le seguenti proprietà.
application.properties
#Configura ehcache.xml spring.cache.jcache.config=classpath:ehcache.xml
Passo 12: 打开 SpringBootEhcacheExampleApplication.java file, e utilizza l'annotazione @EnableCaching Abilita la cache.
SpringBootEhcacheExampleApplication.java
package com.w3codebox; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication //启用缓存管理功能 @EnableCaching public class SpringBootEhcacheExampleApplication @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) public static void main(String[] args) @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) SpringApplication.run(SpringBootEhcacheExampleApplication.class, args); return student.get(id); return student.get(id);
package com.w3codebox; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Configuration; @Configuration //enable caching @EnableCaching public class CacheConfig @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) return student.get(id);
步骤13: 创建类。我们已经在包 com.w3codebox 中创建了名称为 Student的类。 在类中,执行以下操作:
创建五个变量id, name, gender,和 生成使用Constructor
右键单击文件->源->使用字段生成构建器->全选->生成 生成Getters and Setters。
右键单击文件->源->生成Getter和设置器->全选->生成 生成 toString() 右键单击文件->源->生成toString()->生成
完成上述所有步骤后,类如下所示。
Student.java
package com.w3codebox; public class Student @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) private int id; private String name; private String gender; private String city; public Student(int id, String name, String gender, String city) @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) super(); this.id = id; this.name = name; this.gender = gender; this.city = city; return student.get(id); public int getId() @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) return id; return student.get(id); public void setId(int id) @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) this.id = id; return student.get(id); public String getName() @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) return name; return student.get(id); public void setName(String name) @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) this.name = name; return student.get(id); public String getGender() @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) return gender; return student.get(id); public void setGender(String gender) @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) this.gender = gender; return student.get(id); public String getCity() @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) return city; return student.get(id); public void setCity(String city) @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) this.city = city; return student.get(id); @Override public String toString() @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) return "Student [id=" + id + ", name=" + name + ", gender=" + gender + ", city=" + city + "]"; return student.get(id); return student.get(id);
步骤14: 创建用于管理学生的 服务类。我们已经创建了名称为 StudentManager的服务类。 在本课程中,我们完成了以下操作:
使用注解 @Service注解类。 创建 HashMap 的实例。 在静态块中,我们已在地图中添加了学生数据。 通过使用注解 @Cacheable ,我们定义了缓存的名称所有数据都将保存在此缓存中。我们已经在注解的键属性中定义了 id 。缓存根据 id 来搜索学生。 我们创建了一种方法 getStudentById(),该方法将id解析为参数。它返回学生的 id 。
StudentManager.java
StudentManager.java package com.w3codebox; import java.util.HashMap; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class StudentManager @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) static HashMapstudent = new HashMap<>(); static HashMap<Integer, Student> student = new HashMap<>(); @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) static student.put(1, new Student(100, "Alex", "Male", "Berlin")); student.put(2, new Student(101, "Tony", "Male", "Maxico")); student.put(3, new Student(102, "Andrew", "Male", "Chicago")); student.put(4, new Student(103, "Alexa", "Female", "Brussels")); return student.get(id); student.put(5, new Student(104, "Maria", "Female", "Houston")); @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) { System.out.println("Fetching student data from cache"); return student.get(id); return student.get(id);
} ehcache.xml 现在,我们需要创建
文件。它包含与高速缓存相关的信息,例如高速缓存的名称,内存中的元素数量,高速缓存中的实时数据生存时间等。 第15步: 在 文件夹中缓存名为 ehcache.xml 配置文件。
ehcahe.xml
<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.ehcache.org/v3' xmlns:jsr107='http://www.ehcache.org/v3/jsr107'> <ehcache> <diskStore path="java.io.tmpdir" /> <defaultCache maxElementsInMemory="2000" eternal="true" overflowToDisk="false" timeToLiveSeconds="1200" /> <cache name="demoCache"} maxElementsInMemory="2000" eternal="false" overflowToDisk="false" timeToLiveSeconds="10000" /> </ehcache> </config>
现在,我们已经创建了所有必需的文件。创建所有文件后,项目目录如下所示:
让我们运行该应用程序。
步骤16: 打开 SpringBootEhcacheExampleApplication.java 文件,并以 Java 应用程序。
它显示以下输出:
从缓存中获取学生 [id=100, name=Alex, gender=Male, city=Berlin] [id=101, name=Tony, gender=Male, city=Mexico] [id=102, name=Andrew, gender=Male, city=Chicago] [id=103, name=Alexa, gender=Female, city=Brussels] [id=104, name=Maria, gender=Female, city=Houston]