Spring Boot缓存之EhCache

Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache(1) 配置含义:name:缓存名称。maxElementsInMemory:缓存最大个数。eternal:对象是否永久有效,一但设置了,timeout将不起作用。timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。 阅读详情

Spring Boot缓存技术

Spring Boot支持的缓存种类较多,例如EhCache、Redis、JCache 等,其中我们使用较多的是EhCache。

Spring Boot使用Cache之EhCache

  1. 首先我们可以在pom中添加依赖

    <!-- caching -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
    </dependency>
    </dependencies>
  2. 在Spring Boot配置文件中写入配置

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

    此处classpath为我们定义的缓存配置xml文件路径

  3. 创建encache.xml文件,路径和内容如下
    encache.xml路径

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="ehcache.xsd">
        <cache name="mxCache" 
            eternal="false" 
            maxEntriesLocalHeap="0"
            timeToIdleSeconds="50">
        </cache>
    </ehcache>

    eternal:true表示对象永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false
    maxEntriesLocalHeap:堆内存中最大缓存对象数,0没有限制
    timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可无限期地处于空闲状态.

  4. 写一个EhCacheService接口

    public interface EhCacheService {
    
        User selectById(Integer id);
    
        User updateById(User user);
    
        String deleteById(Integer id);
    }
  5. 写接口的实现类EhCacheServiceImpl,代码如下

    @CacheConfig(cacheNames = "mxCache")
    @Repository
    public class EhCacheServiceImpl implements EhCacheService {
    
        @Autowired
        private TestUserDao testUserDao;
    
        @Cacheable(key = "#p0")
        @Override
        public User selectById(Integer id) {
            System.out.println("查询功能,缓存找不到,直接读库, id=" + id);
            User user = testUserDao.getOne(1);
            return user;
        }
    
        @CachePut(key = "#p0")
        @Override
        public User updateById(User user) {
            System.out.println("更新功能,更新缓存,直接写库, id=" + user);
            return testUserDao.save(user);
        }
    
        @CacheEvict(key = "#p0")
        @Override
        public String deleteById(Integer id) {
            System.out.println("删除功能,删除缓存,直接写库, id=" + id);
            return "清空缓存成功";
        }
    }

    此处@CacheConfig(cacheNames = “mxCache”)注解的cacheNames为我们在配置文件encache.xml中配置的name

  6. 创建测试的CacheController,

    @RestController
    @RequestMapping("/cache")
    public class CacheController {
    
        @Autowired
        private EhCacheService ehCacheService;
    
        @RequestMapping(value = "/select", method = RequestMethod.GET)
        public String get(@RequestParam(defaultValue = "1") Integer id) {
            User user = ehCacheService.selectById(id);
            return user.toString();
        }
    
        @RequestMapping(value = "/update", method = RequestMethod.GET)
        public String update(@RequestParam(defaultValue = "1") Integer id) {
            User user = ehCacheService.selectById(id);
            user.setUsername("测试cache");
            ehCacheService.updateById(user);
            return user.toString();
        }
    
        @RequestMapping(value = "/del", method = RequestMethod.GET)
        public String del(@RequestParam(defaultValue = "1") Integer id) {
            return ehCacheService.deleteById(id);
        }
    }
  7. 启动项目之前,在Spring Boot启动类加@EnableCaching注解

    @EnableCaching
    @SpringBootApplication
    public class SpringBootDemo9Application {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootDemo9Application.class, args);
        }
    }
  8. 由于我们在数据库已经有一条数据,
    数据库数据
    访问测试地址http://127.0.0.1:8080/cache/select,返回页面
    select返回页面
    控制台显示,再次刷新页面,则会发现控制台不显示该语句,说明现在已经是在缓存取得数据
    select控制台显示
    访问测试地址http://127.0.0.1:8080/cache/del,返回页面
    del返回页面
    控制台显示,由于我们在代码写的删除并没有真的删除,因此这里不会真的删除数据库数据,但是已经清掉了id为1的缓存数据
    del控制台显示
    再次访问测试地址http://127.0.0.1:8080/cache/select,会发现又在数据库中取值并存于缓存中了
    访问测试地址http://127.0.0.1:8080/cache/update,返回页面
    update返回页面
    控制台显示
    update控制台显示
    此时数据库里的数据已经被更改,且缓存也同时被修改.

缓存注解解释

1、@Cacheable:主要用来配置方法,能够根据方法的请求参数对其结果进行缓存。即当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本身被略过了,取而代之的是方法的结果直接从缓存中找到并返回了。

参数介绍:

  • value:缓存的名字,必须指定至少一个。

  • key:缓存的key,可以为空,如果指定要按照SpEL表达式编写;如果不指定,则缺省按照方法的所有参数进行组合。

  • condition:缓存的条件,可以为空,使用SpEL编写,返回true或者false,只有为true才能缓存。

例子:

@Cacheable(value="shops:detail",key="'id:'+#p0")
public Shop getById(String id);

- 这两行代码的意思是指,缓存的名字为:shops:detail,其中缓存的key值为id:id的值。其中#p0的意思是指加有@Cacheable注解的方法中的第一个参数

2、@CacheEvict:主要对方法配置,用来标记要清空缓存的方法,当这个方法被调用并满足一定条件后,即会清空缓存。

参数解析:

  • value:缓存的位置,不能为空。
  • key:缓存的key,默认为空。
  • condition:触发的条件,只有满足条件的情况才会清楚缓存,默认为空,支持SpEL。
  • allEntries:true表示清除value中的全部缓存,默认为false。

例子:

@CacheEvict(value="shops:detail",key="'id:'+#p0['id']",condition="#p0['id']>0")
public Shop getById(Map<String, Object> param);
  • 上面两行代码表示,只要param中key为id的值大于0,将进行缓存操作,否则直接调用调用getById方法返回结果。
    @Caching(evict={@CacheEvict(value=”shops:brief”,allEntries=true)})
    public void delete(String id);

上面两行代码表示,只要执行了delete方法,就刷新缓存名为”shops:brief”下面的所有缓存。

3、@CachePut:主要针对方法的配置,能够根据方法的请求参数对其结果进行缓存,和@Cacheable不同的是,它每次都会触发真实方法的调用。

@CachePut(value="shops:detail",key="'id:'+#p0['id']")
public Shop update(Map<String, Object> param);
  • 上面两行代码表示,当调用update方法时,该方法体会被执行,并且执行的结果会返回写入到缓存中。
Spring Cache和EhCache实现缓存管理 1、认识Spring Cache Spring Cache是Spring提供的一整套缓存解决方案。它本身并不提供缓存实现,而是提供统一的接口和代码规范、配置、注解等,以便整合各种Cache方案,使用户不用关心Cache的细节。 Spring支持“透明”地向应用程序添加缓存,将缓存应用于方法,在方法执行前检查缓存中是否有可用的数据。这样可以减少方法执行的次数,同时提高响应的速度。缓存的应用方式“透明”,不会对调用者造成任何干扰。只要通过注解@EnableCaching启用了缓存支持,Spring Boo. 阅读详情

相关推荐

Spring Boot整合ehcache3.0 缓存

Spring Boot结合ehcache3.0以上缓存1、题记 目前市面上大多数文章都是ehcache2.0的版本,由于ehcache3.0改动较大,原来的配置方式已经不使用了,故小小研究了一番,笔以记之。 2、 先配置Spring boot<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/P

一年e度的夏天的专栏 8670

spring cache缓存框架使用

说明 spring cache是spring框架的缓存抽象,集成了各种主流缓存实现(ConcurrentMap、redis、ehcache、Caffeine等) spring默认使用ConcurrentMap作为缓存;如果工程中引入了redis配置,则会使用redis作为缓存 spring通过CacheManager判断具体使用哪个缓存,每个缓存都有一个具体的CacheManager(比如:EhC...

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 2016

Spring Boot基础教程:EhCache缓存的使用

前面我们学会了如何使用Spring Boot使用进程内缓存在加速数据访问。可能大家会问,那我们在Spring Boot中到底使用了什么缓存呢? 在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者: Generic JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others) EhCache 2.x Hazelcas

chen801090的博客 631

springboot集成spring cache 详细教程

缓存是一种保存数据副本的技术,可以快速访问之前保存的数据。Spring Cache是Spring Framework中的一部分,为Java应用提供了通用的缓存抽象,使得我们可以使用各种不同的缓存实现。: 指定使用的缓存类型,默认为simple。simple: 使用基于内存的简单缓存,默认选项。none: 禁用缓存。concurrent: 使用作为缓存提供程序。ehcache: 使用Ehcache作为缓存提供程序。redis: 使用Redis作为缓存提供程序。caffeine。

日拱一卒无有尽,功不唐捐终入海 1611

Springboot 整合Ehcache 缓存教程

Ehcache是一种高性能、开源的Java缓存框架,被广泛应用于许多大规模、高并发的分布式系统中。它提供了一种快速、可扩展、分布式的数据缓存方案,支持各种内存级别的缓存、磁盘级别的缓存、分布式缓存等。Ehcache设计目标主要是提供高性能和可扩展性。EhcacheEhcacheEhcache总之,Ehcache是一种成熟的、可靠的分布式缓存框架,适合用于高并发、大规模的分布式缓存场景中。

洛阳泰山的博客 3392

JAVA:Spring Boot 集成 Ehcache 缓存框架

Ehcache是Java平台下的高性能分布式缓存框架,主要用于提升系统性能和扩展性。它支持内存/磁盘存储、多种淘汰策略,并兼容JSR-107标准。Spring Boot集成需注意版本兼容性,2.x支持而3.x已移除。配置包括添加依赖、创建ehcache.xml定义缓存策略,并通过@EnableCaching和@Cacheable注解实现缓存功能。高级应用场景涵盖多级缓存、分布式部署、动态更新等,能有效应对缓存击穿、穿透等问题。

木头 1472

Spring Boot整合缓存——Ehcache缓存!超详细!

本文详细介绍了如何在SpringBoot项目中整合Ehcache缓存框架。主要内容包括:1)Ehcache的特点和优势;2)创建SpringBoot项目并配置相关依赖;3)通过ehcache.xml文件配置缓存策略;4)实现可序列化的Book实体类;5)测试缓存效果,验证数据是否成功缓存到内存和磁盘。此外,还特别强调了正常关闭程序以确保缓存数据成功序列化到磁盘的重要性。通过本案例,大家可以了解SpringBoot与Ehcache的集成方法,以及声明式缓存注解的实际应用。

元气满满的霄霄滴博客 1667

车载测试工程师必备:5分钟搞定CANoe台架搭建(附DBC导入技巧)

本文为车载测试工程师提供快速搭建CANoe测试台架的实用指南,涵盖硬件连接、DBC文件导入及常见报错解决方案。通过详细步骤和高效技巧,帮助工程师在5分钟内完成台架搭建,提升车载测试效率,特别适合紧急功能验证场景。

potato的博客 812

Spring Boot中使用缓存Redis、EhCache

缓存相信各位同学都或多或少用到过,毕竟不能把所有压力都给数据库。今天来简单总结一下下在Spring Boot中使用Redis和EhCache缓存O(∩_∩)O~ Spring Boot本身是支持多种缓存实现的,其中提供了4个注解来帮助大家使用缓存: @EnableCaching 开启缓存支持 @Cacheable 先检查缓存是否存在,若存在,则直接返回缓存中结果;若不存在,则执行方法获取结果,并...

leebin_20的博客 1048

匈牙利算法解决指派问题清晰流程

匈牙利算法解决指派问题清晰流程 百度词条上,指派问题(Assignment problem)是这么定义的:在满足特定指派要求条件下,使指派方案总体效果最佳。如:有若干项工作需要分配给若干人(或部门)来完成;有若干项合同需要选择若干个投标者来承包:有若干班级需要安排在若干教室里上课等。   一、做减法(归约): 行归约:每行元素减去该行最小元素。 列归约:每行元素减去该行最小元素。

siss0siss的博客 6万+

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当实验数据不符合正态分布时,该非参数检验是分析两因素设计(包括主效应和交互效应)的有效工具。文章从原理、环境配置、数据导入、核心代码到结果解读与报告撰写,提供了完整的实战指南,并附有常见的避坑建议。

weixin_29061465的博客 397

另一种缓存,Spring Boot 整合 Ehcache

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

2401_83916283的博客 749

解决ADS1.2报错Cannot obtain license

报错如下 将licenses文件下的license内容进行修改: 修改为如下内容即可。 # # Generated on 2021-dec-1 by licwizard # PACKAGE ads armlmd 1.200 E32F0DE5161D COMPONENTS="armasm compiler bats armulate axd adwu fromelf armlink codewarrior armsd" INCREMENT ads armlmd 1.200 permanent uncounte

qq_46110320的博客 3461

spring boot 使用ehcache 实现缓存

所谓缓存是一种存储机制,可将数据保存在某一个地方,并以一种更快的方式为以后的请求提供服务 spring 对于缓存提供了声明式缓存注解 ,并提供了四种类型的声明式缓存注解(同样是使用了AOP 技术实现),这些注解定义了那些 方法的返回值将要被缓存或者从缓存存储器中移除 ,需要注意的是,只有使用public 定义的方法才可以被缓存,当在一个类上使用注解时,该类中的每个公共方法都将被缓存到给定的存储器中...

Sean的博客 371

手把手带你搭建一个语音对话机器人:5分钟定制个人AI小助手

通过本文的简单步骤,你已经掌握了如何用 Python 搭建一个语音对话机器人。我们使用了实现语音识别,利用 OpenAI API 生成对话内容,并通过gTTS将文本转换为语音。整个流程非常简洁,你可以根据自己的需求进一步扩展机器人功能,甚至将其集成到实际的应用场景中。

小蜗牛的珍贵百宝箱 4804

W5500 TCP服务器状态机详解:从SOCK_CLOSED到SOCK_ESTABLISHED的完整流程

本文深入解析W5500芯片作为TCP服务器时的状态机转换流程,从SOCK_CLOSED到SOCK_ESTABLISHED的完整链路实践。通过硬件协议栈架构分析、状态机全流程拆解及异常处理方案,帮助开发者构建高可靠性的嵌入式网络服务端,优化TCP连接性能与稳定性。

Jerry的专栏 1165

Spring Boot 集成 Ehcache 缓存,三步搞定!

本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序的数据缓存功能。在Spring Boot应用程序中,我们可以通过Spring Caching来快速搞定数据缓存。 接下来我们将介绍如何在三步之内搞定 Spring Boot 缓存。 1. 创建一个Spring Boot工程 你所创建的Spring Boot应用程序的maven依赖文件至少应该是下面的样子: &...

sincegc的博客 426

STM32面试知识点总结分析

通过Boot引脚设定,寻找初始地址初始化栈指针 __initial_sp指向复位程序 Reset_Hander设置异常中断 HardFault_Handler设置系统时钟 SystemInit调用C库函数 _main。

嵌入式技术开发 2513

Spring Boot缓存组件Ehcache、Caffeine、Redis、Hazelcast

本文分析了Spring Boot缓存架构的核心组件与主流缓存工具特性对比。通过表格和图表详细比较了Ehcache、Caffeine、Redis和Hazelcast在性能、存储方式、集群支持等关键维度的差异,并提供了本地缓存(Caffeine)和分布式缓存(Redis)的配置实现案例。针对不同应用场景,提出技术选型决策树:小数据量高性能场景推荐Caffeine,大数据量分布式场景选择Redis或Hazelcast。最后对比了各方案的高级特性,为开发者提供全面的缓存技术选型参考。

笔记 2835

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【spring-boot】spring-boot集成ehcache实现缓存机制

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

小告白 784

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

spring boot集成ehcache 2.x 用于hibernate二级缓存[TOC] 本文将介绍如何在spring boot中集成ehcache作为hibernate的二级缓存。各个框架版本如下 spring boot:1.4.3.RELEASE spring framework: 4.3.5.RELEASE hibernate:5.0.1.Final(spring-boot-sta

yiduyangyi的专栏 6176

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring Boot - 实用功能14 - Ehcache缓存加持

Ehcache缓存加持

qq_43350524的博客 732

spring boot集成ehcache缓存

简介:Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。 第一步:添加maven依赖 <!-- 开添加缓存依赖 --> <dependency> ...

快乐的小三菊的博客 159

Spring boot 添加ehcache缓存

应用:开发的小项目,无需搭建redis环境和数据库,从而实现缓存+过期时间的效果。 一、pom.xml文件中引入相关依赖 <!--开启 cache 缓存 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </depe.

weixin_39048904的博客 1094
上一篇: Spring Boot - JPA配置使用
下一篇: Spring Boot整合Redis
mxjesse
博客等级 码龄17年 9粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值