Springboot下Ehcache的基本使用:附带工具类,快来围观吧

Ehcache3开发入门简介 在高并发应用中缓存就是核心机制。最近在研究Ehcache,发现这是一个更加灵活易用的缓存框架(相对于Redis、Memcache),Ehcache更加小巧轻便。而且都有持久化机制,不用担心JVM和服务器重启的数据丢失。我用四个字来形容:拎包入住。 著名的Hibernate的默认缓存策略就是用Ehcache,Liferay的缓存也是依赖Ehcache,可见其健壮性。与其黑盒的瞎眼使用,不如来研究下这... 阅读详情

1 使用步骤

1.1 引入依赖与启动类注解

引入依赖,版本跟随Springboot即可

		<!--ehcache缓存-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>

启动类增加@EnableCaching注解

@EnableJpaAuditing
@SpringBootApplication
@EnableScheduling
@EnableCaching
public class PCMSApplication {

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

}
1.2 新增Ehcache配置文件,并在application.properties文件配置
  1. Resources根目录下增加ehcache.xml文件
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

    <!--磁盘存储路径,当内存缓存满了的时候,就会往这里面放,java.io.tmdir是操作系统缓存的临时目录,不同操作系统缓存目录不一样。-->
    <diskStore path="java.io.tmpdir"/>

    <!--defaultCache:echcache的默认缓存策略  -->
    <defaultCache
            maxElementsInMemory="10000"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
    </defaultCache>

    <!--accessToken缓存策略-->
    <!--
    maxElementsInMemory      内存缓存中最多可以存放的元素数量,若放入Cache中的元素超过这个数值,则有以下两种情况
                             1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中
                             2)若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache中原有的元素
    overflowToDisk           内存不足时,是否启用磁盘缓存
    eternal                  缓存中对象是否永久有效
    timeToIdleSeconds        缓存数据在失效前的允许闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,若超过这个时间没有访问此Cache中的某个元素,那么此元素将被从Cache中清除
    timeToLiveSeconds        缓存数据的总的存活时间(单位:秒),仅当eternal=false时使用,从创建开始计时,失效结束。
    maxElementsOnDisk        磁盘缓存中最多可以存放的元素数量,0表示无穷大
    diskExpiryThreadIntervalSeconds   磁盘缓存的清理线程运行间隔,默认是120秒
    memoryStoreEvictionPolicy         内存存储与释放策略,即达到maxElementsInMemory限制时,Ehcache会根据指定策略清理内存  共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出)
    -->
    <cache name="DICTIONARY_CACHE"
           maxElementsInMemory="1000000"
           overflowToDisk="true"
           timeToIdleSeconds="0"
           timeToLiveSeconds="180000"
           maxElementsOnDisk="10000000"
           diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LRU">
    </cache>
</ehcache>
  1. application.properties增加配置spring.cache.type=ehcache
1.3 引入工具类
  1. 普通工具类:支持获取缓存值,保存或更新缓存以及删除缓存
package com.gosun.pcms.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;


/**
 * @author yiqiang
 * @date 2020/8/11 13:46
 */
@SuppressWarnings("WeakerAccess")
@Component
@Slf4j
@CacheConfig(cacheNames = {"DICTIONARY_CACHE"})
public class EhcacheUtils {

    @Cacheable(key = "#keyName")
    public  Object getCache(String keyName){
        log.info("[ EHCACHE ] 正在缓存 ==> Key: {}",keyName);
        return null;
    }

    @CachePut(key="#keyName")
    public  <T> T updateCache(String keyName,T t){
        log.info("[ EHCACHE ]  正在保存 ==> Key: {},Value: {}",keyName,t);
        return t;
    }

    @CacheEvict(key = "#keyName")
    public void delCache(String keyName){
        log.info("[ EHCACHE ]  正在删除 ==> Key:{}",keyName);
    }

}

  1. 工具类进一步封装:先尝试从缓存中获取,如果缓存中没有可以更换数据获取途径(比如数据库),再把获取的值存入缓存中
package com.gosun.pcms.util;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;


import javax.annotation.Resource;
import java.util.function.Supplier;

/**
 * @author yiqiang
 * @date 2020/8/11 14:34
 */
@Component
@Slf4j
public class CacheUtil {

    @Resource
    private EhcacheUtils ehcacheUtils;

    public Object cache(String keyName,Supplier supplier) {
        Object cache = ehcacheUtils.getCache(keyName);
        log.info("[ CacheUtil ] CACHE: {}",cache);
        return cache==null?ehcacheUtils.updateCache(keyName,supplier.get()):cache;
    }
}

2 结果展示

  1. 编写Controller,模拟普通字典表的获取过程
package com.gosun.pcms.controller;

import com.gosun.pcms.service.DetentionReasonService;
import com.gosun.pcms.util.CacheUtil;
import com.gosun.pcms.util.EhcacheUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author yiqiang
 * @date 2020/8/7 17:38
 */
@RestController
@Api(value = "扣车理由字典", description = "扣车理由字典")
@RequestMapping(value = "/detentionReason")
@Slf4j
public class DetentionReasonController {

    @Resource
    private DetentionReasonService reasonService;

    @Resource
    private CacheUtil cacheUtil;

    @GetMapping(value = "/getAll")
    @ApiOperation(value = "获取全部:扣车理由字典")
    public Object getAll() throws InterruptedException {
        long t=System.currentTimeMillis();
        Object detention_reason = cacheUtil.cache("detention_reason", reasonService::getAll);
        log.info("耗时为: {}ms",System.currentTimeMillis()-t);
        return detention_reason;
    }
}
  1. 耗时展示:
    从下图可以看出:首次获取走了数据库,耗时150ms,之后的请求都走了本地缓存,耗时0~1ms
    引入本地缓存
Springboot整合Cache缓存组件(Redis,Caffine,Jetcache,EhCache等) Springboot整合各种缓存组件,在日常开发中除了分布式缓存,更多的还是各种服务内部缓存的组件,这里把Springboot整合的各种缓存组件都列出来,作为一个总结 阅读详情

相关推荐

【SpringBoot】在SpringBoot中使用Ehcache

SpringBoot提供了对缓存的支持,通过在启动类中添加@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者: * Generic * JCache (JSR-107) * EhCache 2.x * Hazelcast * Infinispan * Redis * Guava ...

lmb55的专栏 5211

SpringBoot集成EhCache

EhCache简介和SpringBoot集成EhCache

qq_33501272的博客 3275

SpringBoot添加Ehcache缓存,这里有你所有问题的答案

SpringBoot添加Ehcache缓存步骤: 1、pom.xml添加如下依赖 <!-- ehcache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency&...

huang_wei_cai的专栏 1661

Java项目调用Ehcache3.x版本缓存数据

Ehecache缓存封装,基于硬编码及ehcache.xml 构造CacheManager管理器,实现灵活缓存

天涯芳草 801

SpringBoot集成Ehcache实现本地缓存

文章目录1. 前言2. 搭建SpringBoot项目2.1 引入依赖2.2. 编写业务类3. 配置 Ehcache4. 使用 Ehcache5. 测试5.1. 第一次请求接口5.2. 第二次请求接口(与上一次间隔 TTL 以内)5.3. 第三次请求(与上一次间隔超过 TTL)参考 1. 前言 Ehcache 作为本地缓存,接入简单。 想了解更多知识,可 Google 下 Ehcache,Redis...

仰起嘴角 3497

SpringBoot集成外部缓存库EhCache3

Spring 从 3.1 开始引入对 Cache 的支持,并支持使用JCache(JSR-107)注解简化开发。Cache 接口下 Spring 提供了各种 xxxCache 的实现,其中就包括了EhCache。EhCache 是一个纯 Java 的进程内缓存框架,是 Hibernate 中默认的 CacheProvider,同Redis一样,EhCache 不是纯内存缓存,它支持基于内存和磁盘的二级缓存,本文所使用的EhCache3还增加了堆外缓存的支持,同时 EhCache 还原生支持集群能力。

qq_29536773的博客 2627

Springboot 中简单使用EhCache

EhCache是一个比较成熟的Java缓存框架,在springboot 的底层中已经封装了该框架,Springboot对ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也简易。 一、创建项目并导入依赖 //ehcache compile group: 'org.springframework.boot', name: 'spring-boot-starter-cache', version: '2.0.6.RELEASE' compil

LWT_博客 3181

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

其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。Kafka入门为什么选择KafkaKafka的安装、管理和配置。

m0_72758098的博客 1056

【存储中间件】JVM缓存EhCache(一):介绍、基本使用、Springboot整合EhCache

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

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

【SpringBoot】27、SpringBoot中整合Ehcache实现热点数据缓存

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

JACKAL 21万+

Ehcache工具类

本工具类包括初始化cache 修改缓存容器配置 向指定容器中设置值 取值 删除指定的ehcache容器 删除所有容器 删除容器内所有元素 释放CacheManage 获取所有的cache名称

springBoot整合Ehcache——工具类调用

  项目需求要缓存常用数据,整合Ehcache实现,结果@Cacheable注解怎么都不管用,网上找了很多资料各种试各种不行,无奈!只好写个工具类使用。 一、pom.xml配置 <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artif...

weixin_30512089的博客 1100

微信小程序利用Echarts加载中国地图的步骤

微信小程序如何利用Echarts加载地图?可按照如下四个步骤进行。(阅读时间大概3分钟)。

成都都成 5281

SpringBoot使用shiro-ehcache缓存

由于网上教程很多,对于shiro的概念和用法已经讲解非常详细,这里直接给出介绍shiro概念的博主连接Shiro笔记(一)----Shiro安全框架简介 以及写的不错的博客:springboot(十四):springboot整合shiro-登录认证和权限管理 这里是本项目源码,已经上传github,感兴趣的小伙伴可以下载 : 去下载 话不多说,先上pom文件: <?xml version="...

、思考致富的博客 4938

C#与硬件开发入门:从零开始搭建你的第一个硬件项目

《C#硬件开发入门指南》摘要:本文介绍了使用C#进行硬件开发的基础知识,重点讲解了通过串口通信控制硬件设备的实现方法。内容包括:C#硬件开发优势、必备基础知识、环境准备步骤,并提供了一个完整的串口数据读取示例代码。文章还给出了进阶学习建议和常见问题解决方案,帮助开发者快速掌握C#与硬件设备通信的基本技能,为进一步开发物联网、工业控制等应用打下基础。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 974

使用Mask2Former和X-Decoder训练自定义数据集及结果复现报告

本报告记录了使用MMDetection框架中的Mask2Former和X-Decoder模型在自定义数据集上的训练过程。报告包含环境配置、数据集准备、模型训练与优化(解决了Mask2Former的PQ值异常问题)、性能评估等关键环节。详细展示了从数据集转换(将客户提供的COCO格式数据适配MMDetection框架)、配置文件修改、到最终模型训练和评估的全流程。特别针对Mask2Former训练中的PQ值异常问题提供了解决方案,并对比了两种模型在自定义数据集上的表现。报告还包含完整的代码实现和技术细节。

huanghm88的专栏 1104

springboot使用ehcache缓存

EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统,它提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案,快速简单。 Springboot对ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也简易。 在你的项目上配置以下几步即可使用 <!-- Spring Boot 缓...

zalan01408980的博客 1931

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图、天地图)

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图)

1万+

SpringBoot中使用Ehcache的详细教程

SpringBoot中使用Ehcache的详细教程

佳佳乐的博客 5163

手把手教你学simulink实例--基于Simulink的船舶动力定位系统建模与仿真

船舶动力定位系统(Dynamic Positioning System, DPS)是一种通过控制推进器来保持船舶在指定位置和航向的技术。它广泛应用于海上钻井平台、海洋调查船、起重船等需要精确位置控制的场景。DPS的核心任务是实时感知环境干扰(如风、浪、流),并通过闭环控制算法调整推进器输出,以抵消外界扰动并维持船舶的位置和姿态。本项目旨在基于MATLAB/Simulink平台,构建船舶动力定位系统的数学模型,并进行仿真分析,验证其性能和稳定性。

MHD0815的博客 1085

自然语言处理在智能客服系统中的应用

引言与背景 1.1 书籍的目的和内容概述 《自然语言处理在智能客服系统中的应用》旨在探讨自然语言处理(NLP)技术在智能客服系统中的应用,帮助读者理解NLP的核心概念及其在解决实际业务问题中的关键作用。随着人工智能技术的快速发展,自然语言处理成为构建智能客服系统的核心模块之一。本书将深入解析NLP

AI天才研究院 971

EhCache 缓存 EhCache 整合SpringBoot

EhCache 缓存,单机缓存,SpringBoot整合EhCache缓存,cache注解使用

weixin_47748260的博客 1992

YOLOv11涨点改进| CVPR 2026 | 全网独家首发、特征融合改进篇| 引入SRFusion 空间细化多级融合,含多种创新融合改进,涨点可直接发论文,适合裂缝图像检测,小目标检测任务高效涨点

🔥本文提出SRFusion空间细化多级融合模块,用于改进YOLOv11网络模型。该模块通过高分辨率特征引导低分辨率语义特征的融合,利用空间注意力机制对上采样后的特征进行加权细化,增强多尺度特征间的空间细节交互。SRFusion模块能够提升模型对目标区域的表达能力,有效改善小目标、密集目标及复杂背景场景下的检测效果,同时保持YOLOv11的高效性与实时检测性能。文章详细介绍了模块结构、实现原理、核心代码及在YOLOv11中的三种配置方法,为模型优化提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 149

springboot项目自定义ehcache工具类

首先是项目整合ehcache,详情请看博主另一篇文章。->传送门! 直接上源码。 package com.shengxi.resys.util; import javax.annotation.Resource; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; /** * @author yan * @version 1.0.0 * @date 2020-08-

matthew_leung的博客 929

RT-DETR 模型剪枝优化:结构化剪枝对 R18/R50 性能的影响

本文提出分层结构化剪枝策略R18:参数量减少 42%(28M→16.2M),推理速度提升 35%(15→20.3 FPS@Jetson Nano),mAP@0.5 仅降 1.2%;R50:参数量减少 55%(170M→76.5M),推理速度提升 48%(42→62.2 FPS@T4),mAP@0.5 仅降 2.1%。核心价值:为 RT-DETR 提供“精度-效率-部署”平衡的轻量化方案,推动其在边缘设备、工业质检等场景的大规模落地。部署建议。

走向CTO的路上... 466

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SpringBoot-缓存Ehcache的使用

spring缓存(EhCache)是在Spring3.1开始引入的,但是其本身只提供了缓存接口,不提供具体缓存的实现,其实现需要第三方缓存实现(Generic、EhCache、Redis等)。EhCache、Redis比较常用,使用Redis的时候需要先安装Redis服务器。 为什么引入缓存 提升服务性能:例如在项目开发完成以后,随着时间推移,各种数据急剧增加,在数据不断增加的情况下,一个简单的Select * from Student,都可能非常耗时,变成我们用户体验的痛点。并且在分布式远...

uuqaz的博客 1195

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: EasyPOI导入导出Excel:内含工具类,可直接使用
下一篇: 最简单的设计模式----单例模式,你懂了吗?
一步一结
博客等级 码龄7年 50粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值