English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot EhCaching

EhCache

EhCacheはパフォーマンスを向上させるために使用されるJavaベースのオープンソースのキャッシュです。Ehcacheの現在のバージョンは、 3 。それが提供するものには、 JSR-107 キャッシュマネージャの実装です。それを使用することができます。

EhCacheの機能

それ速い軽量で拡張可能および柔軟 それにより、私たちはシリアライズ可能およびオブジェクト それが提供するものには、 LRU、LFU、FIFOなどのキャッシュエjection戦略があります。 キャッシュを保存する場所メモリおよびディスク(SSD)にあります。 それが SLF4J 記録を実行します。 完全に実装されています。 JSR-107 および Jcache それが JGroups または JMS および RMI 分散キャッシュを実行します。 それを使用してスムーズなクエリ言語分散検索を実行します。

EhCacheのモード

キャッシュは複数のアクセスモードを使用します。EhCacheは以下のモードを使用します:

Cache-aside Cache-として-SoR (system-of-record) 読み取り-通過 書き込み-通過 書き込み-後方

Cache-aside

サブキャッシュモードでは、まず、アプリケーションがキャッシュをクエリします。データが見つかった場合、データを直接返します。逆の場合、SoRからデータを取得し、キャッシュに保存してから返します。

Cache-として-SoR

cache-として-SoR モードはSoRのキャッシュへの読み書き操作を表します。アプリケーションの責任を軽減します。読み書きモードの組み合わせを使用し、 直読み、直書き、および 後書き。 アプリケーションの負担を軽減します。キャッシュが雷問題を解決するのを許可します

読み取り-通過

読み取り-通過モードをコピーすることもできます。-キャッシュからデータを読み取るときのプライベートモードにラップするのが最適です。読み取りとキャッシュの保持の違いは、読み取りモードが CacheEntryFactory インターフェース。キャッシュからオブジェクトを読み取る方法を指導します。通読モードを使用する際には、EhCacheインスタンスを SelfPopulatingCache インスタンスを実現することにあります。

書き込み-通過

書き込み-通過モードは、データをキャッシュに書き込む際にバックアップキャッシュモードをコピーすることもできます。直書きモードとバックアップキャッシュモードの違いは、直書きモードが CacheWriter インターフェース。直書きおよび後書きモードでキャッシュを設定します。データをSoRにデータを書き込む際に同じ実行スレッドを使用します。

書き込み-後方

書き込み-後方モードの形で異なります。他の3つのモードとは異なり。 設定可能な遅延後に、キャッシュエントリを変更します。遅延は、 秒、分、一日、週、または 長い時間同時に、データを後で同じ実行スレッドで書き込むためにデータをキューに追加します。

データの書き込みがトランザクション範囲外で行われる後書きモードを使用します。これは、SoRで主要なトランザクションとは異なるデータをコミットするために新しいトランザクションを作成することを意味します。

EhCachingストレージレベル

EhCacheは、ヒープ、ディスク、クラスターなどのさまざまなデータストレージエリアを使用することができます。複数のストレージエリアを使用するマルチストレージキャッシュ(複数のストレージエリアを使用する)を設定できます。それを以下のように設定できます。 レベル。

これらのレベルは順序で構成されています。最も下層は 認可レベル、別のレベルは キャッシュレベル、別名 ネアア または ネアキャッシュ。 キャッシュレベルは複数のストレージエリアを持つことができます。最も熱されたデータはキャッシュレベルに保持されますが、認可レベルよりも速いです。キャッシュレベルと比較して、他のデータは認可レベルに保持され、速度が遅いですが、豊富です。

EhCacheがサポートするデータストレージのタイプには 四種類:

オン-Heap Store オフ-Heap Store Disk Store Clustered Store

オン-Heap Store

キャッシュエントリをJavaのヒープメモリに格納します。Javaアプリケーションと共有ストレージを使用します。ヒープを使用するため、速いですが、ストレージ空間は限られています。ゴミ収集器はヒープ上のストレージをスキャンします。

オフ-Heap Store

キャッシュエントリをメインメモリ(RAM)に格納しています。ゴミ収集器はそれをスキャンしません。キャッシュエントリが使用される前にヒープ上のストレージに移動するため、ヒープ上のストレージよりも遅いです。そのサイズは制限されています。

Disk Store

キャッシュエントリを格納するためにディスクを使用しています。RAMに基づくストレージ(ストレージ上およびストレージ下)よりもはるかに遅いです。ディスクストレージモードを使用する場合は、専用のディスクを使用するのが最適です。

Clustered Store

它将缓存条目存储在远程服务器上。它比堆外存储慢。它可能具有提供高可用性的故障转移服务器。

上图显示了

一个应用程序可能具有多个缓存管理器。 许多缓存可以由缓存管理器处理。 缓存可以使用多个层来存储缓存条目。 EhCache将最近使用或经常使用的数据放在更快的层(缓存层)中。

配置EhCache

EhCache jar放在类路径中。配置 xml 并将其放在类路径中。创建一个引用缓存。

EhCache示例

在以下示例中,我们将在应用程序中配置EhCache。

ステップ1: 打开 Spring Initializr https://start.spring.io/。

ステップ2: 选择Spring Boot版本 2.3.0 M2

ステップ3: 提供 Group名称。我们提供了组名 com.w3codebox。

ステップ4: 提供 Artifact。我们提供了Artifact spring-boot-ehcache-example。

ステップ5: 添加 Spring Web 依赖项。

ステップ6: 单击 Generate (生成)按钮。当我们单击"生成"按钮时,它将与应用程序相关的所有规范包装到一个 Jar 文件中,并将其下载到本地系统。

ステップ7: 提取 jar文件。

ステップ8: 复制文件夹并将其粘贴到STS工作区中。

第9手順: 导入项目。

文件->导入->现有 Maven 项目->下一步->浏览->选择文件夹spring-boot-ehcache-example->选择文件夹->完成

导入项目需要时间。

ステップ10: 从 Maven 存储库 https://mvnrepository.com/并将其粘贴到 pom.xml中ファイル

spring-boot-starter-cache ehcache 3 cache API。

注意: 请勿使用包net.sf.ehcache的ehcache。

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>
<groupId>org.springframework.boot</groupId>
<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>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<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>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/マイルストーン</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<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);
    }
}
注意: メインアプリケーションファイルで@EnableCachingアノテーションを使用したくない場合は、別のCacheConfigクラスを作成し、メソッドにアノテーションを付けることができます。
package com.w3codebox;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;
@Configuration
//キャッシュを有効に
@EnableCaching
public class CacheConfig 
{
}

ステップ13: クラスを作成しました。すでにパッケージ com.w3codebox 中で、以下の名前の Studentクラス。 クラス内で以下の操作を実行します:

五つの変数を作成id, name, gender、および 生成コンストラクタを使用
ファイルを右クリックして->ソース->フィールドを使用してビルダーを生成->全選->生成
生成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();
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.city = city;
    }
    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() 
    {
    return gender;
    }
    public void setGender(String gender) 
    {
    this.gender = gender;
    }
    public String getCity() 
    {
    return city;
    }
    public void setCity(String city) 
    {
    this.city = city;
    }
    @Override
    public String toString() 
    {
        return "Student [id=" + id + ", name=" + name + ", gender=" + gender + ", city=" + city + "]";
    }
}

ステップ14: を管理する を作成しました。を名前として作成したサービス サービス クラス。名前が

StudentManagerのサービスクラス。 を使用して、このコースでは以下の操作を完了しました: @Serviceアノテーションを付与したクラス。 を作成し、 HashMap のインスタンス。 を使用して、静的ブロックで地図に学生データを追加しました。 @Cacheable を使用して、注釈の、キャッシュの名前を定義し、すべてのデータがこのキャッシュに保存されます。@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 
{
    static HashMap<Integer, Student> student = new HashMap<>();
    static 
    {
        student.put(1, new Student(10, 0, "Alex", "男性", "ベルリン");
        student.put(2, new Student(101, "Tony", "男性", "マキシコ");
        student.put(3, new Student(102, "Andrew", "男性", "シカゴ");
        student.put(4, new Student(103, "Alexa", "女性", "ブリュッセル");
        student.put(5, new Student(104, "Maria", "女性", "ヒューストン");
    }
    @Cacheable(cacheNames="demoCache", key="#id")public Student getStudentById(Integer id) 
    {
        System.out.println("キャッシュからstudentデータを取得中");
        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=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]