Spring 使用 Ehcache 技术指南

JVM之EhCache缓存 在查询数据的时候,数据大多来自数据库,咱们会基于SQL语句的方式与数据库交互,数据库一般会基于本地磁盘IO的形式将数据读取到内存,返回给Java服务端,Java服务端再将数据响应给客户端,做数据展示。但是MySQL这种关系型数据库在查询数据时,相对比较慢,因为有磁盘IO,有时没命中索引还需要全盘扫描。在针对一些热点数据时,如果完全采用MySQL,会存在俩问题。第一个MySQL相对很脆弱,肯能会崩,第二个MySQL查询效率慢。会采用缓存。 阅读详情

在 Java 企业应用开发中,缓存是一种非常重要的技术,可以有效提高应用的性能和响应速度。Ehcache 是一个非常流行的开源缓存解决方案,广泛应用于各种 Java 应用中。本文将介绍如何在 Spring 框架中集成和使用 Ehcache。

1. 引入 Ehcache 依赖

首先,在项目的 pom.xml 文件中添加 Ehcache 和 Spring 的依赖:

<dependencies>
    <!-- Spring 缓存依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    
    <!-- Ehcache 依赖 -->
    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.10.0</version>
    </dependency>
</dependencies>

2. 配置 Ehcache

在资源目录下创建 ehcache.xml 文件,配置 Ehcache 缓存策略:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xmlns='http://www.ehcache.org/v3'
        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd">

    <cache alias="exampleCache">
        <key-type>java.lang.String</key-type>
        <value-type>java.lang.String</value-type>
        <expiry>
            <ttl unit="seconds">600</ttl>
        </expiry>
        <heap unit="entries">100</heap>
    </cache>

</config>

3. Spring 缓存配置

在 Spring 应用中启用缓存,并配置 Ehcache 作为缓存管理器。在主配置类中添加以下内容:

import org.ehcache.jsr107.EhcacheCachingProvider;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.cache.Caching;
import javax.cache.configuration.Configuration;
import javax.cache.spi.CachingProvider;
import java.net.URISyntaxException;
import java.net.URL;

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public javax.cache.CacheManager cacheManager() throws URISyntaxException {
        CachingProvider cachingProvider = Caching.getCachingProvider();
        URL myUrl = getClass().getResource("/ehcache.xml");
        Configuration<?, ?> configuration = cachingProvider.getCacheManager(
            myUrl.toURI(), getClass().getClassLoader()).getConfiguration(Configuration.class);
        return cachingProvider.getCacheManager();
    }
}

4. 使用缓存

在需要缓存的方法上使用 @Cacheable 注解:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Cacheable("exampleCache")
    public String getUserById(String userId) {
        // 模拟耗时操作,例如数据库查询
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "User:" + userId;
    }
}

在上述代码中,getUserById 方法将会被缓存,当使用相同的参数调用时,将直接返回缓存中的结果,而不会再次执行方法体。

5. 清除缓存

可以使用 @CacheEvict 注解清除缓存:

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @CacheEvict(cacheNames = "exampleCache", allEntries = true)
    public void clearCache() {
        // 清除缓存
    }
}

6. 测试缓存

编写测试代码来验证缓存功能:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class CacheTestRunner implements CommandLineRunner {

    @Autowired
    private UserService userService;

    @Override
    public void run(String... args) throws Exception {
        System.out.println("First call: " + userService.getUserById("1"));
        System.out.println("Second call: " + userService.getUserById("1"));
        System.out.println("Third call: " + userService.getUserById("2"));
    }
}

运行应用,你将会看到第一次调用 getUserById 方法时有 3 秒的延迟,而后续调用相同参数的方法将会立即返回结果。

结论

通过本文的介绍,我们了解了如何在 Spring 中集成和使用 Ehcache。通过配置 Ehcache 和使用 Spring 提供的缓存注解,可以显著提升应用的性能。Ehcache 的强大功能和 Spring 的灵活性结合,使得缓存管理变得更加简单高效。

Spring Cache和EhCache实现缓存管理 1、认识Spring Cache Spring Cache是Spring提供的一整套缓存解决方案。它本身并不提供缓存实现,而是提供统一的接口和代码规范、配置、注解等,以便整合各种Cache方案,使用户不用关心Cache的细节。 Spring支持“透明”地向应用程序添加缓存,将缓存应用于方法,在方法执行前检查缓存中是否有可用的数据。这样可以减少方法执行的次数,同时提高响应的速度。缓存的应用方式“透明”,不会对调用者造成任何干扰。只要通过注解@EnableCaching启用了缓存支持,Spring Boo. 阅读详情

相关推荐

缓存类型及优缺点:Ehcache、Caffeine、Memcached和Redis的比较

本文将对比分析四种常见的缓存类型:Ehcache、Caffeine、Memcached和Redis。通过探讨它们的优点、缺点以及适用场景,帮助读者更好地理解如何根据实际需求选择合适的缓存技术。同时,本文还将简要介绍这四种缓存类型支持的数据类型

程序员Forlan的博客 6616

Ehcache详解(转载)

Ehcache 是一种基于标准的开源缓存,可提高性能,卸载数据库并简化可伸缩性。 它是使用最广泛的基于 Java 的缓存,因为它功能强大,经过验证,功能齐全,并与其他流行的库和框架集成。

ElegantApple的博客 8841

SpringBoot系列:Spring Boot集成Spring Cache,使用EhCache

path:指定在硬盘上存储对象的路径path可以配置的目录有:user.home(用户的家目录)user.dir(用户当前的工作目录)java.io.tmpdir(默认的临时目录)ehcache.disk.store.dir(ehcache的配置目录)绝对路径(如:d:\ehcache)查看路径方法:String tmpDir = System.getProperty(“java.io.tmpdir”);–>

2401_84010302的博客 445

一文详解Ehcache

缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是 0 就意味着元素可以停顿无穷长的时间。表明所修饰的方法是可以缓存的:当第一次调用这个方法时,它的结果会被缓存下来,在缓存的有效时间内,以后访问这个方法都直接返回缓存结果,不再执行方法中的代码段。首先使用注解标记方法,相当于定义了切点,然后使用 Aop 技术在这个方法的调用前、调用后获取方法的入参和返回值,进而实现了缓存的逻辑。:这个参数设置 DiskStore(磁盘缓存)的缓存区大小。

通往IT大道的专栏 5154

Cadence OrCAD: 层次化设计 Hierarchical Design

详细介绍OrCAD的原理图层次化设计方法。

Fantasy237的博客 1万+

Eureka自我保护机制

Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last

Soul_Ming的博客 543

【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(8-Spring整合ehcache)

-diskStore path:用来配置磁盘缓存使用的物理路径name: 缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里)eternal="false" 元素是否永恒,如果是就永不过期(必须设置)maxElementsOnDisk=磁盘缓存中最多可以存放的元素数量,0表示无穷大maxElementsInMemory="1000" 内存缓存中最多可以存放的元素数量(必须设置)

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。 637

【Coze 扣子案例】第 23 期・商业篇:一键获取精准商机,自动化招标信息查询与分析

通过地区和项目类型等多维度组合查询全国招标信息网数据,实现招标公告的快速定位。自动解析招标公告内容,提取关键信息,并生成结构化摘要。帮助企业高效获取精准商机,提升市场竞争力,降低人工成本,解决 “信息过载” 与 “精准匹配难” 的双重问题。

weixin_72689845的博客 1928

如何在Spring Boot中使用EhCache缓存

在查询数据的时候,数据大多来自于数据库,我们会基于SQL语句与数据库交互,数据库一般会基于本地磁盘IO将数据读取到内存,返回给Java服务端,我们再将数据响应给前端,做数据展示。但是MySQL这种关系型数据库查询数据相对比较慢,因为有磁盘IO,或者是全盘扫描的风险,在针对一些热点数据时,会对MySQL造成比较大的压力,此时我们可以采用缓存的方式来解决。而缓存又分为很多种,相对服务端角度来说,可以采用Redis和JVM这两种方式。

weixin_73412838的博客 3750

图像标注神器:完全开源免费的多功能标注工具Labelme详解

Labelme是MIT开发的免费开源图像标注工具,支持多边形、矩形等多种标注类型,适用于目标检测、分割等计算机视觉任务。提供Windows可执行文件和Python安装两种方式,可输出JSON格式并转换为COCO等标准数据集。具有跨平台、功能全面、社区活跃等优势,能显著提升标注效率,是AI视觉项目的重要数据准备工具。

数字人生 529

ESP32 WIFI 智能巡线小车设计与实现(四足 / 四轮通用)

本文设计的 ESP32 WIFI 智能巡线小车,硬件模块化、软件轻量化,兼容四足与四轮两种结构,实现了自动巡线与 WIFI 远程控制双功能。系统成本低、易上手,适合嵌入式初学者学习 WIFI 通信、传感器应用、运动控制等核心知识点,也可在此基础上扩展蓝牙控制、避障、视觉识别等功能。

weixin_42300449的博客 152

Spring使用Cache、整合Ehcache

Spring使用Cache、整合Ehcache         从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所

Elim的博客 1万+

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 178

spring + ehcache 使用实例

1 spring与ehcache结合使用,需要导入如下的包:ehcache , commons-logging , cglib , asm , spring的jar包具体版本可以选择最新。2 spring配置文件applicationContext.xml如下:

先相信你自己,然后别人才会相信你。 3万+

YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如今各种网络模型更新迭代越来越快,计算机视觉相关的文章也越来越多,多到一些普通,通用的改进点无法达到发表的要求。本专栏正是解决这个问题!如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 6万+

Autosar诊断实战系列02-Dem(DTC&Event)要点及配置开发详解

Dem模块及其与Dcm等其他模块的交互是整个诊断Stack的重中之重,本文先对与其他模块的交互逻辑进行介绍,有一定掌握后继续重点介绍配置部分的开发。

initiallizer的博客 3331

Spring集成ehcache

1.导入jar包 ehcache-core-2.4.5.jar ehcache-spring-annotations-1.2.0.jar(使用spring注解的形式配置时需要引入的jar包,依赖于guava) ehcache-web-2.0.4.jar(做页面缓存需要用到) guava-r09.jar(google推出可以帮助你写出更优雅代码的工具,和apache-commons差不多)

太匆匆 1142

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

EhCache的使用及与Spring的整合

本文主要介绍EhCache的使用,以及EhCache与Spring的整合的实践经验。 EHCache API的基本用法 首先介绍CacheManager类。它主要负责读取配置文件,默认读取CLASSPATH下的ehcache.xml,根据配置文件创建并管理Cache对象。 // 使用默认配置文件创建CacheManager CacheManag

special dream的博客 2512

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

使用spring cache和ehcache

一.spring cache Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。使用Spring Cache需...

王小汪的博客 670

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

spring boot中使用ehcache

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33701251的博客 116

spring ehcache 使用详解

Spring 整合 Ehcache 管理缓存详解 yellowbutterfly 前言 Ehcache是一个成熟的缓存框架,你可以直接使用它来管理你的缓存。 Spring提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Ehcache),但本身不直接提供缓存功能的实现。它支持注解方式使用缓存,非常方便。 本文先通过Ehcache独立应用的范例来介...

272

spring 集成 ehcache

一、准备工作 需要依赖 jar 包: 1.ehcache核心包                net.sf.ehcache        ehcache-core     2.spring 扩展包        org.springframework        spring-context-support     二、编程开发 1.ehcache.

wyc2410的专栏 880

spring中基于aop使用ehcache

继续上篇,这篇介绍服务层缓存,基于aop的方式使用ehcache 一、修改配置文件 修改spring-context-ehcache.xml文件,加入: <!-- ehcache缓存实例 --> <bean id="testCacheInterceptor" class="org.springframework.cache.ehcache.EhCach...

113

EhCache使用

1,使用代码编写的方式使用ehcache: 准备一个可用的maven项目:pom文件中引用:; <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.3</version> </dependency> 版本号可根据具体匹配; 1.:首先您得准备一些ehcache

z_xin1024的博客 596
上一篇: 使用 Spring 整合 Kafka 进行消息处理
下一篇: 在 Spring 中使用 Redis 进行缓存
firepation
博客等级 码龄10年 2254粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值