English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
EhCache는 성능을 향상시키기 위해 사용되는 Java 기반 오픈 소스 캐시입니다. Ehcache의 현재 버전은 다음과 같습니다 3 . 그는 다음을 제공합니다 JSR-107 캐시 관리자의 구현. 우리는 그를 직접 사용할 수 있습니다.
그fast,lightweight, scalable및flexible。 그는 우리에게 다음을 허용합니다serializable및객체 그는 다음과 같은 것을 제공합니다 LRU, LFU, FIFO 등캐시驱逐전략. 그는 캐시를 저장합니다메모리및디스크(SSD)에 있습니다. 그는 다음에 의존합니다 SLF4J 기록을 수행합니다. 그는 완전히 구현되었습니다 JSR-107 및 Jcache 그는 다음을 통해 지원합니다 JGroups 또는 JMS 및 RMI 분산 캐시를 수행합니다. 그는 사용합니다fluently query language분산 검색을 수행합니다.
캐시는 다양한 접근 모드를 사용합니다. EhCache는 다음과 같은 모드를 사용합니다:
Cache-aside Cache-as-SoR (system-of-record) Read-through Write-through Write-behind
에 있습니다. 보조 캐시모델에서 먼저, 애플리케이션이 캐시를 쿼리합니다. 데이터를 찾으면 즉시 데이터를 반환합니다. 반대의 경우, SoR에서 데이터를 가져와 캐시에 저장한 후 반환합니다.
cache-as-SoR 模式代表SoR对缓存的读写操作。它减少了应用程序的责任。它使用读写模式的组合,包括 直读,直写,및 后写。 它减少了应用程序的难度。它允许缓存解决雷电问题
Read-through模式还复制了缓存-从高速缓存中读取数据时预留模式。读取和缓存保留之间的区别在于,读取模式实现了 CacheEntryFactory 接口。它指导缓存如何从缓存中读取对象。最好在使用通读模式时将EhCache实例包装为 SelfPopulatingCache 实例。
Write-through模式还可以在将数据写入缓存时复制备用缓存模式。直写模式和备用缓存模式之间的区别在于,直写模式实现 CacheWriter 接口。它为直写和后写模式配置高速缓存。它在同一执行线程中将数据写入SoR。
Write-behind模式的形式不同其他三种模式。在 可配置的延迟之后,它会修改缓存条目。延迟可能会在 秒,分钟,一天,一周,또는 很长그리고 데이터는 다음에 쓰이도록 데이터를 큐에排队 합니다.
데이터 입력은 트랜잭션 범위 외에서 후기 입력 모드로 발생합니다. 이는 주 트랜잭션과 다른 데이터를 SoR에 제출하기 위해 새 트랜잭션을 생성하는 것을 의미합니다.
EhCache는 스택, 디스크, 클러스터와 같은 다양한 데이터 저장 구역을 사용할 수 있도록 허용합니다. 다중 저장 캐시(여러 저장 구역을 사용하는)를 구성할 수 있습니다. 이를 설정할 수 있습니다. 층입니다.
이 층들은 순서대로 조직되어 있습니다. 가장 깊은 층은 권한 층그리고 다른 층은 캐시 층으로도 알려져 있습니다. 근근 또는 근캐시 캐시 층은 여러 저장 구역을 가질 수 있습니다. 가장 뜨거운 데이터는 캐시 층에 보관되어 있으며, 그것이 권한 층보다 더 빠르기 때문입니다. 캐시 층과 비교해 다른 데이터는 권한 층에 보관되어 있으며, 빠르지 않지만 더 풍부합니다.
EhCache가 지원하는 데이터 저장 유형은 다음과 같습니다 네 가지:
On-Heap Store Off-Heap Store Disk Store Clustered Store
그는 캐시 항목을 Java 힙 메모리에 저장합니다. 그것은 Java 애플리케이션과 공유 저장소를 사용합니다. 이것은 스택을 사용하기 때문에 빠르지만 저장 공간은 제한적입니다. 가취收集기는 스택 저장소를 스캔합니다.
그는 캐시 항목을 메인 메모리(RAM)에 저장합니다. 가취收集기는 그것을 스캔하지 않습니다. 캐시 항목이 사용 전에 스택 저장에 옮겨지기 때문에 스택 저장보다 느립니다. 그 크기는 제한됩니다.
그는 캐시 항목을 저장하기 위해 디스크를 사용합니다. RAM 기반 저장(저장 상과 저장 하)보다 훨씬 더 느립니다. 디스크 저장 모드를 사용하는 경우 최고의 디스크를 사용하는 것이 좋습니다.
它将缓存条目存储在远程服务器上。它比堆外存储慢。它可能具有提供高可用性的故障转移服务器。
上图显示了
一个应用程序可能具有多个缓存管理器。 许多缓存可以由缓存管理器处理。 缓存可以使用多个层来存储缓存条目。 EhCache将最近使用或经常使用的数据放在更快的层(缓存层)中。
将 EhCache jar放在类路径中。配置 xml 并将其放在类路径中。创建一个引用缓存。
在以下示例中,我们将在应用程序中配置EhCache。
단계1: 打开 Spring Initializr https://start.spring.io/。
단계2: 选择Spring Boot版本 2<자바 버전>3.0 M2 。
단계3: 提供 Group名称。我们提供了组名 com.w3codebox。
단계4: 提供 Artifact。我们提供了Artifact spring-봇-<이름>스프링-example。
단계5: 添加 Spring Web 依赖项。
단계6: 单击 Generate (生成)按钮。当我们单击"生成"按钮时,它将与应用程序相关的所有规范包装到一个 Jar 文件中,并将其下载到本地系统。
단계7: 提取 jar文件。
단계8: 复制文件夹并将其粘贴到STS工作区中。
제9단계: 导入项目。
文件->导入->现有 Maven 项目->下一步->浏览->选择文件夹spring-봇-<이름>스프링-example->选择文件夹->完成
导入项目需要时间。
단계10: 从 Maven 存储库 https://mvnrepository.com/并将其粘贴到 pom.xml中파일.
spring-봇-스타터-cache <이름>스프링 3 cache API。
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/마벤-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <부모> <그룹 아이디>org.springframework.boot/그룹 아이디> <아티펙트 아이디>스프링-봇-스타터-부모/아티펙트 아이디> <버전>2<자바 버전>3.0.M2</SNAPSHOT <상대 경로/> <!-- 저장소에서 부모 검색 --> </부모> <그룹 아이디>com.w3코드박스/그룹 아이디> <아티펙트 아이디>스프링-봇-<이름>스프링-ehcache/아티펙트 아이디> <버전>1-<버전>0.0./SNAPSHOT 버전>-봇-<이름>스프링-ehcache/이름> 예제/<설명>스프링 봇을 위한 데모 프로젝트< 설명> <속성>1<자바 버전>8</. </자바 버전> 속성> <의존성> <그룹 아이디>org.springframework.boot/그룹 아이디> <아티펙트 아이디>스프링-봇-스타터-<의존성들>/아티펙트 아이디> </의존성> <의존성> <그룹 아이디>org.springframework.boot/그룹 아이디> <아티펙트 아이디>스프링-봇-스타터-웹/아티펙트 아이디> </의존성> <의존성> 캐시/그룹 아이디> <그룹 아이디>org.ehcache/아티펙트 아이디> </의존성> <의존성> <아티펙트 아이디>ehcache/그룹 아이디> <그룹 아이디>javax.cache-<아티펙트 아이디>cache/아티펙트 아이디> </의존성> <의존성> <그룹 아이디>org.springframework.boot/그룹 아이디> <아티펙트 아이디>스프링-봇-스타터-테스트</아티펙트 아이디> <스코프>테스트</스코프> <제외들> <제외> <그룹 아이디>org.junit.vintage/그룹 아이디> <아티펙트 아이디>junit-빈고-엔진</아티펙트 아이디> </제외> </제외> </의존성> </의존성> <빌드> <플러그인들> <플러그인> <그룹 아이디>org.springframework.boot/그룹 아이디> <아티펙트 아이디>스프링-봇-마벤-<플러그인>/아티펙트 아이디> </플러그인> </플러그인> </빌드> <저장소들> <저장소> <id>스프링-마일스톤</id> <이름>스프링 마일스톤</이름> <url>https://repo.spring.io/마일스톤</url> </저장소> </저장소들> <플러그인 저장소들> <플러그인 저장소> <id>스프링-마일스톤</id> <이름>스프링 마일스톤</이름> <url>https://repo.spring.io/마일스톤</url> </pluginRepository> </pluginRepositories> </project>
이제 우리는 ehcache.xml 파일.
단계11: 열기 application.properties 파일을 열고 다음 속성을 사용하여 EhCache를 구성합니다.
application.properties
# ehcache.xml 설정 spring.cache.jcache.config=classpath:ehcache.xml
단계12: 열기 SpringBootEhcacheExampleApplication.java 파일을 열고 애노테이션을 사용하여 @EnableCaching 캐시 활성화
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 { public static void main(String[] args) { SpringApplication.run(SpringBootEhcacheExampleApplication.class, args); } }
package com.w3codebox; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Configuration; @Configuration //caching 활성화 @EnableCaching public class CacheConfig { }
단계13: 클래스를 생성했습니다. 우리는 다음 패키지에서 생성했습니다. com.w3codebox 이름이 Student 클래스. 클래스 내에서 다음 작업을 수행하세요:
다섯 개의 변수를 생성id, name, gender,및 생성Constructor 사용
파일을 오른쪽 클릭->원본->필드를 사용하여 빌더 생성->전체 선택->生成 생성Getters and Setters。
파일을 오른쪽 클릭->원본->Getter와 Setter 생성->전체 선택->生成 생성 toString() 파일을 오른쪽 클릭->원본->생성toString()->生成
完成上述所有步骤后,类如下所示。
Student.java
package com.w3codebox; public class Student { private int id; private String name; private String gender; private String city; public Student(int id, String name, String gender, String city) { super(); public class Student private String city; return id; return name; } >생성 { 위의 모든 단계를 완료한 후, 클래스는 다음과 같습니다。 } Student.java { public class Student } private int id; { private String name; } private String gender; { private String city; } public Student(int id, String name, String gender, String city) { super(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) this.name = name; { public String getGender() + id + return gender; + public void setGender(String gender) + this.gender = gender; + public String getCity() + return city; + public void setCity(String city) + this.city = city; } }
단계14: @Override public String toString()return "Student [id=" ", name=" name
", gender=" gender ", city=" city "]"; 을 사용하여 학생을 관리하는 서비스를 생성했습니다. StudentManager의 서비스 클래스입니다. 를 생성하여 @Service 애노테이션을 사용한 클래스를 생성했습니다。HashMap의 인스턴스를 이미 맵에 추가했습니다。 id 내용에 추가했습니다. id 。캐시는 속성에 정의된 키에 따라 정의되었습니다. 모든 데이터는 이 캐시에 저장됩니다. @Cacheable 애노테이션의 우리는 학생을 검색하기 위한 메서드를 생성했습니다。 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 { static HashMap<Integer, Student> student = new HashMap<>(); static { student.put(1, new Student(10, "0", "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")); student.put(5, new Student(104, "Maria", "Female", "Houston")); } @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) { System.out.println("캐시에서 학생 데이터 가져오는 중"); return student.get(id); } }
현재, 우리는 생성해야 합니다 ehcache.xml 파일입니다. 이 파일은 캐시와 관련된 정보를 포함하고 있습니다. 예를 들어, 캐시 이름, 메모리에 있는 요소 수, 캐시 내 실시간 데이터의 수명 등입니다.
제15단계: 에 있습니다. src/main/resources 폴더에 캐시 이름 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=, name=Alexa, gender=Female, city=Brussels]100, name=Alex, gender=Male, city=Berlin] [id=, name=Alexa, gender=Female, city=Brussels]101, name=Alex, gender=Male, city=Berlin] [id=, name=Alexa, gender=Female, city=Brussels]102, name=Tony, gender=Male, city=Mexico] [id=, name=Alexa, gender=Female, city=Brussels]103, name=Andrew, gender=Male, city=Chicago] [id=, name=Alexa, gender=Female, city=Brussels]104, name=Maria, gender=Female, city=Houston]