SpringBoot中使用Ehcache的详细教程

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。用惯了 Redis,很多人可能已经忘记了还有 EhCache 这么一个缓存框架

一、简介

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认CacheProvider。Ehcache 是一种广泛使用的开源 Java 分布式缓存。主要面向通用缓存,Java EE 和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个 gzip 缓存 servlet 过滤器,支持 REST 和 SOAP api 等特点。

特性

  • 快速、简单
  • 多种缓存策略
  • 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  • 缓存数据会在虚拟机重启的过程中写入磁盘
  • 可以通过RMI、可插入API等方式进行分布式缓存
  • 具有缓存和缓存管理器的侦听接口
  • 支持多缓存管理器实例,以及一个实例的多个缓存区域
  • 提供Hibernate的缓存实现

与 Redis 相比

  • EhCache 直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。
  • Redis 是通过 Socket 访问到缓存服务,效率比 EhCache 低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用 EhCache 。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用 Redis。
  • EhCache 也有缓存共享方案,不过是通过 RMI 或者 Jgroup 多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。

二、引入 EhCache

1、引入依赖

在 pom.xml 文件中,引入 Ehcache 的依赖信息

<!-- ehcache依赖 -->
<dependency>
 <groupId>net.sf.ehcache</groupId>
 <artifactId>ehcache</artifactId>
 <version>2.10.6</version>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

2、配置文件

创建 EhCache 的配置文件:ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

 <!--
  磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
  path:指定在硬盘上存储对象的路径
  path可以配置的目录有:
  user.home(用户的家目录)
  user.dir(用户当前的工作目录)
  java.io.tmpdir(默认的临时目录)
  ehcache.disk.store.dir(ehcache的配置目录)
  绝对路径(如:d:\\ehcache)
  查看路径方法:String tmpDir = System.getProperty("java.io.tmpdir");
  -->
 <diskStore path="java.io.tmpdir" />

 <!--
  defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
  maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
  eternal:代表对象是否永不过期 (指定true则下面两项配置需为0无限期)
  timeToIdleSeconds:最大的发呆时间 /秒
  timeToLiveSeconds:最大的存活时间 /秒
  overflowToDisk:是否允许对象被写入到磁盘
  说明:下列配置自缓存建立起600秒(10分钟)有效 。
  在有效的600秒(10分钟)内,如果连续120秒(2分钟)未访问缓存,则缓存失效。
  就算有访问,也只会存活600秒。
  -->
 <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="600"
     timeToLiveSeconds="600" overflowToDisk="true" />

 <!--
  maxElementsInMemory,内存缓存中最多可以存放的元素数量,若放入Cache中的元素超过这个数值,则有以下两种情况
       1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中
       2)若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素
  eternal,   缓存中对象是否永久有效
  timeToIdleSeconds, 缓存数据在失效前的允许闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,若超过这个时间没有访问此Cache中的某个元素,那么此元素将被从Cache中清除
  timeToLiveSeconds, 缓存数据的总的存活时间(单位:秒),仅当eternal=false时使用,从创建开始计时,失效结束
  maxElementsOnDisk, 磁盘缓存中最多可以存放的元素数量,0表示无穷大
  overflowToDisk,  内存不足时,是否启用磁盘缓存
  diskExpiryThreadIntervalSeconds, 磁盘缓存的清理线程运行间隔,默认是120秒
  memoryStoreEvictionPolicy, 内存存储与释放策略,即达到maxElementsInMemory限制时,Ehcache会根据指定策略清理内存 共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出)
 -->
 <cache name="user"
 	maxElementsInMemory="10000"
 	eternal="false"
 	timeToIdleSeconds="120"
 	timeToLiveSeconds="120"
 	maxElementsOnDisk="10000000"
 	overflowToDisk="true"
 	memoryStoreEvictionPolicy="LRU" />

</ehcache>

<cache name="user"></cache>,我们是可以配置多个来解决我们不同业务处所需要的缓存策略的

默认情况下,EhCache 的配置文件名是固定的,ehcache.xml,如果需要更改文件名,需要在 application.yml 文件中指定配置文件位置,如:

spring:
 cache:
 type: ehcache
 ehcache:
  config: classpath:/ehcache.xml

指定了 EhCache 的配置文件位置

3、开启缓存

开启缓存的方式,也和 Redis 中一样,在启动类上添加 @EnableCaching 注解即可:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication
@EnableCaching
public class SbmApplication {

 public static void main(String[] args) {
  SpringApplication.run(SbmApplication.class, args);
 }
}

三、开始使用

1、@CacheConfig

这个注解在类上使用,用来描述该类中所有方法使用的缓存名称,当然也可以不使用该注解,直接在具体的缓存注解上配置名称,示例代码如下:

@Service
@CacheConfig(cacheNames = "user")
public class UserServiceImpl implements UserService {

}

2、@Cacheable

这个注解一般加在查询方法上,表示将一个方法的返回值缓存起来,默认情况下,缓存的 key 就是方法的参数,缓存的 value 就是方法的返回值。示例代码如下:

@Override
@Cacheable(value = "user", key = "#id")
public User getUserById(Long id) {
 return userMapper.getUserById(id);
}

如果在类上没有加入 @CacheConfig,我们则需要使用 value 来指定缓存名称
这里如果需要多个 key 时,需要使用 “:” 来连接,如:

@Cacheable(value = "user", key = "#name+':'+#phone")

3、@CachePut

这个注解一般加在更新方法上,当数据库中的数据更新后,缓存中的数据也要跟着更新,使用该注解,可以将方法的返回值自动更新到已经存在的 key 上,示例代码如下:

@Override
@CachePut(value = "user", key = "#id")
public User updateUserById(User user) {
 return userMapper.updateUserById(user);
}

4、@CacheEvict

这个注解一般加在删除方法上,当数据库中的数据删除后,相关的缓存数据也要自动清除,该注解在使用的时候也可以配置按照某种条件删除( condition 属性)或者或者配置清除所有缓存( allEntries 属性),示例代码如下:

@Override
@CacheEvict(value = "user", key = "#id")
public void deleteUserById(Long id) {
 userMapper.deleteUserById(id);
}

四、总结

SpringBoot 中使用 Ehcache 比较简单,只需要简单配置,说白了还是 Spring Cache 的用法,合理使用缓存机制,可以很好地提高项目的响应速度。

到此这篇关于SpringBoot中使用Ehcache的文章就介绍到这了,更多相关SpringBoot使用Ehcache内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Boot缓存实战 EhCache示例

    Spring boot默认使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager来实现缓存.但是要切换到其他缓存实现也很简单 pom文件 在pom中引入相应的jar包 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web<

  • 详解spring boot集成ehcache 2.x 用于hibernate二级缓存

    本文将介绍如何在spring boot中集成ehcache作为hibernate的二级缓存.各个框架版本如下 spring boot:1.4.3.RELEASE spring framework: 4.3.5.RELEASE hibernate:5.0.1.Final(spring-boot-starter-data-jpa默认依赖) ehcache:2.10.3 项目依赖 <dependency> <groupId>org.springframework.boot</gro

  • SpringBoot手动使用EhCache的方法示例

    SpringBoot在annotation的层面实现了数据缓存的功能,基于Spring的AOP技术.所有的缓存配置只是在annotation层面配置,像声明式事务一样. Spring定义了CacheManager和Cache接口统一不同的缓存技术.其中CacheManager是Spring提供的各种缓存技术的抽象接口.而Cache接口包含缓存的各种操作. CacheManger 针对不同的缓存技术,需要实现不同的cacheManager,Spring定义了如下的cacheManger实现. Ca

  • springboot整合EHCache的实践方案

    EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心容量问题. spring-boot是一个快速的集成框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 用户登录之后,几乎之后展示任何页面都需要显示一下用户信息.可以在用户登录成功之后将用户信息进行缓存,之后直

  • 详解springboot整合ehcache实现缓存机制

    EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心容量问题. spring-boot是一个快速的集成框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 由于spring-boot无需任何样板化的配置文件,所以spring-boot集成一些其他框架时会有略微的

  • springboot+EHcache 实现文章浏览量的缓存和超时更新

    问题描述 当我们需要统计文章的浏览量的时候,最常规的做法就是: 1.访问文章链接www.abc.com/article/{id} 2.在控制层获取Article实体 3.得到文章浏览量count并且count++ 4.最后update实体Article. 这么做对没有访问量的网站来说很棒,如果网站访问量很大,这么不停的读写数据库,会对服务器造成很大的压力. 解决思路 引入Ehcache,将文章的访问量存在cache中,每点击一次文章,将cache中的count加1.在有效的时间内访问文章只是将c

  • SpringBoot中使用Ehcache的详细教程

    EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider.用惯了 Redis,很多人可能已经忘记了还有 EhCache 这么一个缓存框架 一.简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认CacheProvider.Ehcache 是一种广泛使用的开源 Java 分布式缓存.主要面向通用缓存,Java EE 和轻量级容器.它具有内存和磁盘存储,缓存加载

  • springboot中使用ElasticSearch的详细教程

    新建项目 新建一个springboot项目springboot_es用于本次与ElasticSearch的整合,如下图 引入依赖 修改我们的pom.xml,加入spring-boot-starter-data-elasticsearch <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</

  • Springboot启动扩展点超详细教程小结

    1.背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片.Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制.很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配. 我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性.让使用者以最小的代价接入.想要把自动装配玩的转,就必须要了解spring对于bean的构造生命周期以及各个扩展接口.当然了解了bean

  • IDEA SpringBoot 项目配置Swagger2的详细教程

    原先前后端分离的api文档开启了前后端相互撕逼的对接之路 api更新不及时导致对接失败,以及存在测试不够方便,而swagger则很好的解决了这个问题 在项目中也经常用到swagger2,于是动手记录一下swagger2配置过程,希望能带来一点帮助. 在SpringBoot项目当中使用Swagger主要分为以下几步: 1.SpringBoot-web项目并添加pom.xml依赖 2.编写HelloController,测试成功运行 3.创建一个SwaggerConfig类,配置swagger-ui

  • springboot快速集成mybatis-plus的详细教程

    简介 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生.这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网.那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA. springBoot快速集成mybatis-plus 一.pom文件引入mybatis-plus依赖 <dependenc

  • java、spring、springboot中整合Redis的详细讲解

    java整合Redis 1.引入依赖或者导入jar包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2.代码实现 public class JedisTest { public static void main(String[]

  • k3d入门指南之在Docker中运行K3s的详细教程

    什么是k3d? k3d是一个小型程序,用于在Docker中运行K3s集群. K3s是经过CNCF认证的轻量级Kubernetes发行和沙箱项目.它是为资源有限环境设计的,被打包为单个二进制文件,所需RAM小于512MB. 要了解有关K3s的更多信息,请查看我们之前的公众号文章及B站上的视频. k3d借助从K3s仓库构建的Docker镜像在安装了Docker的任何机器上的Docker容器中启动多个K3s节点. 这样,一台物理(或虚拟)机(称为Docker Host)可以运行多个K3s集群,每个集群

  • Python中使用ipython的详细教程

    ipython简介 ipython他是一个非常流行的python解释器,相比于原生的python解释器,有太多优点和长处,因此几乎是python开发人员的必知必会. 1.ipython相比于原生的python有什么优势 (1) python shell不能在退出保存历史:ipython历史记录自动保存:保存在history.sqlite文件下:可用"_"."__"."___"调用最近三次记录: (2) python shell不支持tab自动补全

  • IntelliJ IDEA中配置Tomcat超详细教程

    目录 在IntelliJ IDEA中配置Tomcat 一.下载及安装Tomcat 二.配置Tomcat环境变量 三.在IntelliJ IDEA中配置Tomcat 在IntelliJ IDEA中配置Tomcat 一.下载及安装Tomcat 1.首先进入Tomcat官网:http://tomcat.apache.org/,在Download中选择需要下载的版本,然后根据电脑系统选择64位/32位的zip,开始下载(要记住安装路径!). ps:有zip和exe两种格式的,zip(64-bit Win

  • 可能是vue中使用axios最详细教程

    目录 安装: 较科学的封装好的axios:(new-axios.js) main.js 引入,添加到vue原型 使用 以下步骤一般不需要 总结 前提条件:vue-cli 项目 安装: npm axios from 'axios' 较科学的封装好的axios:(new-axios.js) import axios from 'axios' import { Notify } from 'vant'; // import Vue from 'vue' // import store from '@/

随机推荐