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

SpringBoot EhCaching

EhCache

EhCache - это开源 кэш на Java, предназначенный для повышения производительности. Текущая версия Ehcache - 3 . Оно предоставляет JSR-107 реализация менеджера кэша. Мы можем использовать его напрямую.

функциональность EhCache

Онобыстрое,лёгкое, расширяемоеигибкое Это позволяет нам выполнятьсериализуемыеиобъекты Оно предоставляет такие функции, как LRU, LFU, FIFO и т.д.стратегии驱逐а кэша. Оно хранит кэшированные данные вПамятьиДиск(SSD). Оно зависит от SLF4J для ведения записи. Оно полностью реализовано JSR-107 и Jcache Оно поддерживает передачу через JGroups или JMS и RMI 进行分布式缓存。 它使用流利的查询语言进行分布式搜索。

EhCache使用模式

缓存使用多种访问模式。 EhCache使用以下模式:

Cache-aside Cache-as-SoR (system-of-record) Read-through Write-through Write-behind

Cache-aside

в 备用缓存模式中,首先,应用程序查询缓存。如果找到数据,它将直接返回数据。在相反的情况下,它从SoR中获取数据,将其存储到缓存中,然后返回。

Cache-as-SoR

cache-as-SoR 模式代表SoR对缓存的读写操作。它减少了应用程序的责任。它使用读写模式的组合,包括 直读,直写,и 后写。 它减少了应用程序的难度。它允许缓存解决雷电问题

Read-through

Read-through模式还复制了缓存-从高速缓存中读取数据时预留模式。读取和缓存保留之间的区别在于,读取模式实现了 CacheEntryFactory 接口。它指导缓存如何从缓存中读取对象。最好在使用通读模式时将EhCache实例包装为 SelfPopulatingCache 实例。

Write-through

Write-through模式还可以在将数据写入缓存时复制备用缓存模式。直写模式和备用缓存模式之间的区别在于,直写模式实现 CacheWriter 接口。它为直写和后写模式配置高速缓存。它在同一执行线程中将数据写入SoR。

Write-behind

Write-behind模式的形式不同其他三种模式。在 可配置的延迟之后,它会修改缓存条目。延迟可能会在 秒,分钟,一天,一周,или 很长时间。同时,它还将数据排队,以便稍后在同一执行线程中写入。

使用后写模式进行数据写入发生在事务范围之外。这意味着它创建了一个新事务以在SoR中提交与主事务不同的数据。

EhCaching存储层

EhCache允许我们使用各种数据存储区域,例如堆,磁盘和群集。我们可以配置一个多存储缓存(使用多个存储区域)。可以将其安排为 层。

这些层是按顺序组织的。最底层是 授权层,另一层是 缓存层。也称为 nearer или near cache。 缓存层可以具有多个存储区域。最热的数据保留在缓存层中,因为它比授权层更快。与高速缓存层相比,其他数据保留在权限层中,速度较慢但较丰富。

EhCache支持的数据存储类型有 四种:

On-Heap Store Он хранит элементы кэша в памяти Java-heap. Он делит хранение с Java-приложением. Это быстро, потому что он использует heap, но объём хранения ограничен. Сборщик мусора также сканирует хранение на вершине памяти. Он использует основную память (RAM) для хранения элементов кэша. Сборщик мусора его не сканирует. Он медленнее, чем хранение на вершине памяти, потому что элементы кэша перед использованием перемещаются в хранение на вершине памяти. Его размер ограничен. Он использует диск для хранения элементов кэша. Он значительно медленнее, чем хранение на основе RAM (свыше и ниже). Если используется режим хранения на диске, лучше всего использовать专用 диск.

On-Heap Store

Он хранит элементы кэша в памяти Java-heap. Он делит хранение с Java-приложением. Это быстро, потому что он использует heap, но объём хранения ограничен. Сборщик мусора также сканирует хранение на вершине памяти.

Он хранит элементы кэша в памяти Java-heap. Он делит хранение с Java-приложением. Это быстро, потому что он использует heap, но объём хранения ограничен. Сборщик мусора также сканирует хранение на вершине памяти.

Off-Heap Store

Он использует основную память (RAM) для хранения элементов кэша. Сборщик мусора его не сканирует. Он медленнее, чем хранение на вершине памяти, потому что элементы кэша перед использованием перемещаются в хранение на вершине памяти. Его размер ограничен.

Дисковое хранилище

Он использует диск для хранения элементов кэша. Он значительно медленнее, чем хранение на основе RAM (свыше и ниже). Если используется режим хранения на диске, лучше всего использовать专用 диск.

Кластеризированное хранилище

Он хранит элементы кэша на удаленном сервере. Он медленнее, чем хранение за пределами памяти. Он может иметь серверы фейковой передачи для обеспечения высокой доступности.

Верхнее изображение показывает Одно приложение может иметь несколько кэш-менеджеров. Многие кэши могут обрабатываться кэш-менеджером. Кэш может использовать несколько слоев для хранения кэш-элементов.

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>
<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>Пример проекта для 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>

Теперь нам нужно настроить 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
//enable 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();
        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 instance. Мы уже добавили данные о студентах в карту в статическом блоке. Используя аннотацию @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 
{
    статический HashMap<Integer, Student> student = new HashMap<>();
    статический 
    {
        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"));
        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=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]