📜  Spring Boot EhCaching

📅  最后修改于: 2021-01-11 05:40:26             🧑  作者: Mango

Spring Boot高速缓存

高速缓存

EhCache是基于Java的开源缓存,用于提高性能。 Ehcache的当前版本是3 。它提供了JSR-107高速缓存管理器的实现。我们可以直接使用它。

EhCache的功能

  • 快速轻巧,可扩展灵活
  • 它允许我们执行SerializableObject
  • 它提供了缓存逐出策略,例如LRU,LFU,FIFO,
  • 它将缓存存储在内存和磁盘(SSD)中。
  • 它取决于SLF4J进行记录。
  • 它具有JSR-107Jcache的完整实现
  • 它支持通过JGroupsJMSRMI进行分布式缓存。
  • 它使用流利的查询语言进行分布式搜索。

EhCache使用模式

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

  • 暂存
  • 缓存即SoR(记录系统)
  • 通读
  • 直写
  • 后写

暂存

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

高速缓存

缓存即SoR模式表示对缓存的SoR读取和写入操作。它减少了应用程序的责任。它使用读写模式的组合,包括通读,直写和后写。它降低了应用程序的难度。它允许缓存解决雷电问题

通读

读取模式还会在从缓存中读取数据时复制备用缓存模式。读取和缓存保留之间的区别在于,读取模式实现CacheEntryFactory接口。它指导缓存如何从缓存中读取对象。在使用通读模式时,最好将EhCache实例与SelfPopulatingCache实例包装在一起。

直写

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

后写

模式与其他三个模式不同。它在可配置的延迟后修改缓存条目。延迟可能以秒,分钟,一天,一周很长时间为单位。同时,它还将数据排队,以便稍后在同一执行线程中写入。

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

高速缓存存储层

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

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

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

  • 堆上商店
  • 堆外商店
  • 磁盘存储
  • 集群商店

堆上商店

它将缓存条目存储在Java堆内存中。它与Java应用程序共享存储。这是快速的,因为它使用堆,但存储空间有限。垃圾收集器还会扫描堆上的存储。

堆外商店

它使用主内存(RAM)来存储缓存条目。垃圾收集器不会对其进行扫描。它比堆上存储慢,因为缓存条目在使用前移到了堆上存储。它的大小是有限的。

磁盘存储

它使用磁盘存储高速缓存条目。它比基于RAM的存储(堆上和堆外存储)要慢得多。如果使用磁盘存储模式,最好使用专用磁盘。它提高了吞吐量。

集群商店

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

上图显示:

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

配置EhCache

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

EhCache的示例

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

步骤1:打开https://start.spring.io/ 。

步骤2:选择Spring Boot版本2.3.0 M2

步骤3:提供群组名称。我们提供了组名com.javatpoint。

步骤4:提供工件。我们提供了Artifact spring-boot-ehcache-example示例。

步骤5:添加Spring Web依赖项。

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

步骤7:解压缩jar文件。

步骤8:复制文件夹并将其粘贴到STS工作区中。

步骤9:导入项目。

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

导入项目需要时间。

步骤10:https://mvnrepository.com/中一个一个地复制以下依赖项,并将其粘贴到pom.xml文件中。

  • 弹簧启动启动缓存
  • ehcache 3
  • 缓存API。

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

pom.xml



4.0.0

org.springframework.boot
spring-boot-starter-parent
2.3.0.M2
 

com.javatpoint
spring-boot-ehcache-example
0.0.1-SNAPSHOT
spring-boot-ehcache-example
Demo project for Spring Boot

1.8



org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-cache


org.ehcache
ehcache


javax.cache
cache-api


org.springframework.boot
spring-boot-starter-test
test


org.junit.vintage
junit-vintage-engine







org.springframework.boot
spring-boot-maven-plugin





spring-milestones
Spring Milestones
https://repo.spring.io/milestone




spring-milestones
Spring Milestones
https://repo.spring.io/milestone



现在,我们需要配置ehcache.xml文件。它告诉框架在哪里找到文件。

步骤11:打开application.properties文件,并使用以下属性配置EhCache。

application.properties

#configuring ehcache.xml
spring.cache.jcache.config=classpath:ehcache.xml

步骤12:打开SpringBootEhcacheExampleApplication.java文件,并使用注释@EnableCaching启用缓存。

SpringBootEhcacheExampleApplication.java

package com.javatpoint;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
//enables the cache management capability
@EnableCaching
public class SpringBootEhcacheExampleApplication 
{
public static void main(String[] args) 
{
SpringApplication.run(SpringBootEhcacheExampleApplication.class, args);
}
}

注意:如果我们不想在主应用程序文件中使用注解@EnableCaching,则可以创建一个单独的CacheConfig类,并用注解对该调用进行注解。

package com.javatpoint;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;
@Configuration
//enable caching
@EnableCaching
public class CacheConfig 
{
}

步骤13:创建模型类。我们在包com.javatpoint中创建了名为Student的模型类。在模型类中,执行以下操作:

  • 创建五个变量ID,名称,性别
  • 使用字段生成构造函数。右键单击文件->源->使用字段生成构造函数->全选->生成
  • 生成Getter和Setters 。右键单击文件->源->生成Getter和Setters->全选->生成
  • 生成一个toString()
  • 右键单击文件->源->生成toString()->生成

完成上述所有步骤后,模型类如下所示。

学生.java

package com.javatpoint;
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,我们定义了缓存的名称。所有数据将保存在该缓存中。我们已经在注释的key属性中定义了id。缓存根据id搜索学生。
  • 我们创建了一个方法getStudentById() ,将id解析为参数。它返回学生的ID。

StudentManager.java

StudentManager.java
package com.javatpoint;
import java.util.HashMap;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
public class StudentManager 
{
static HashMap student = new HashMap<>();
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"));
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);
}
}

现在我们需要创建ehcache.xml文件。它包含与高速缓存有关的信息,例如高速缓存的名称,内存中元素的数量,高速缓存中的实时数据生存时间等。

步骤15:src / main / resources文件夹中创建一个名为ehcache.xml的缓存配置文件。

ehcahe.xml





    


现在,我们已经创建了所有必需的文件。创建所有文件后,项目目录如下所示:

让我们运行该应用程序。

步骤16:打开SpringBootEhcacheExampleApplication.java文件并将其作为Java应用程序运行。

它显示以下输出:

Getting Students from Cache
[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]