springboot整合单机缓存ehcache

news2024/11/26 13:51:06

区别于redis的分布式缓存,ehcache是纯java进程内的单机缓存,根据不同的场景可选择使用,以下内容主要为springboot整合ehcache以及注意事项

  1. 添加pom引用

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.10.9.2</version>
</dependency>
  1. 启动类添加开启缓存注解:@EnableCaching

  1. 添加xml配置,注意,ehcache需要单独的配置文件

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

    <!--默认缓存策略 -->
    <!-- external:是否永久存在,设置为true则不会被清除,此时与timeout冲突,通常设置为false-->
    <!-- diskPersistent:是否启用磁盘持久化-->
    <!-- maxElementsInMemory:最大缓存数量-->
    <!-- overflowToDisk:超过最大缓存数量是否持久化到磁盘-->
    <!-- timeToIdleSeconds:最大不活动间隔,设置过长缓存容易溢出,设置过短无效果,可用于记录时效性数据,例如验证码-->
    <!-- timeToLiveSeconds:最大存活时间-->
    <!-- memoryStoreEvictionPolicy:缓存清除策略-->
    <defaultCache
            eternal="false"
            diskPersistent="false"
            maxElementsInMemory="1000"
            overflowToDisk="false"
            timeToIdleSeconds="60"
            timeToLiveSeconds="60"
            memoryStoreEvictionPolicy="LRU" />


    <cache name="cache1"
           eternal="false"
           diskPersistent="false"
           maxElementsInMemory="1000"
           overflowToDisk="false"
           timeToIdleSeconds="2"
           timeToLiveSeconds="2"
           memoryStoreEvictionPolicy="LRU" />
</ehcache>

这里我定义了一个缓存名字为cache1

  1. 修改项目的配置文件application.properties,添加spring缓存类型以及缓存配置文件路径

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

上面的步骤做好之后,就可以使用了

给你需要加缓存的方法添加注解

@Configuration
public class TestConfig {

    @Cacheable(value = "cache1",key = "#id")
    public TestController.Person create(String id) {
        return new TestController.Person();
    }
}

这里的value跟xml配置文件里的一致即可

我们调用一下测试看看

    @GetMapping("/testCache1")
    public void testCache1(@Param("id") String id) throws InterruptedException {
        Person obj1 = testConfig.create(id);
        Person obj2 = testConfig.create(id);
        Thread.sleep(3000);
        Person obj3 = testConfig.create(id);
        Person obj4 = testConfig.create(id);

        log.info("test1:"+obj1.toString());
        log.info("test2:"+obj2.toString());
        log.info("test3:"+obj3.toString());
        log.info("test4:"+obj4.toString());
        System.out.println(obj1.equals(obj2));
    }

执行一下结果看

可以看到,obj1跟obj2是同一个对象,当程序睡眠了三秒之后,再次调用方法,就会重新创建对象,缓存生效

注意事项:

  1. @Cacheable修饰的方法必须是public并且不能是static,原理是因为使用了动态代理,需要重写方法

  1. xml里面的配置要写全,要不然项目启动报错,就是下图这些

xml里面配置的defaultCache没看出有啥用,我也没删了试试

  1. 使用缓存的方法不能在@RestController修饰的类中,即不能在controller层,要不然缓存失效,可以在@Service、@Configuratin、@Component等类下面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PTA L1-044 稳赢(详解)

前言&#xff1a;内容包括四大模块&#xff1a;题目&#xff0c;代码实习&#xff0c;大致思路&#xff0c;代码解读 题目&#xff1a; 大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现要求你编写一个稳赢不输的…

计算机组成结构之数据传输控制方式、总线、CISC和RISC

数据传输控制方式 输入输出控制方式 程序控制&#xff08;查询&#xff09;方式&#xff1a;cpu一直持续不断在查询I/O是否准备好了&#xff0c;准备好就会调用I/O&#xff1b;I/O没有准备好&#xff0c;CPU会持续等待I/O&#xff1b;&#xff08;软件实现&#xff09;程序中…

vcruntime140_1.dll无法继续执行代码,怎么解决这种问题?

经常使用电脑的人&#xff0c;可能对于这个弹出框应该不陌生&#xff0c;“vcruntime140_1.dll无法继续执行代码”&#xff0c;其实会出现这种情况&#xff0c;主要是因为缺少一个动态链接库 (DLL) 文件导致的。这个文件是 Visual C 2015 库的一部分&#xff0c;某些程序需要这…

第五节 字符设备驱动——点亮LED 灯

通过字符设备章节的学习&#xff0c;我们已经了解了字符设备驱动程序的基本框架&#xff0c;主要是掌握如何申请及释放设备号、添加以及注销设备&#xff0c;初始化、添加与删除cdev 结构体&#xff0c;并通过cdev_init 函数建立cdev 和file_operations 之间的关联&#xff0c;…

阿里云ecs服务器搭建CTFd(ubuntu20)

1.更新apt包索引 sudo apt-get update更新源 1、使用快捷键【ctrlaltt】打开终端。 2、输入以下命令备份原有软件源文件。 cp /etc/apt/sources.list /etc/apt/sources.list.bak_yyyymmdd 3、再输入以下命令打开sources.list文件并添加新的软件源地址。 vim /etc/apt/sources.…

本质安全设备标准(IEC60079-11)的理解(四)

本质安全设备标准&#xff08;IEC60079-11&#xff09;的理解&#xff08;四&#xff09; 对于标准中“Separation”的理解 IEC60079-11使用了较长的篇幅来说明设计中需要考虑到的各种间距&#xff0c; 这也从一定程度上说明了间距比较重要&#xff0c;在设计中是需要认真考虑…

VBA提高篇_ 21 随机数 / 模运算

文章目录1. 模Mod运算2. 随机数及其运算2.1 Rnd()函数调用Excel公式: Rand() / RandBetween()使用VBA函数: Rnd()函数2.2 随机小数化整数公式2.3 伪随机数(过程是随机的,但是实际上不是,随机数算法)2.3.1 随机数初始化2.3.2 随机小数被当做下标时会被自动四舍五入VBA的默认属性…

BERT简介

BERT&#xff1a; BERT预训练模型训练步骤&#xff1a; 使用Masked LM方式将语料库中的某一部分的词语掩盖住&#xff0c;模型通过上下文预测被掩盖的信息&#xff0c;从而训练出初步的语言模型在语料库中选出连续的上下语句&#xff0c;并使用Tranformer模块识别语句的连续性通…

PHP基于TCPDF第三方类生成PDF文件

最近在研发招聘的系统 遇到了这个问题 转换pdf 折腾了很久 分享一下PHP基于TCPDF第三方类生成PDF文件最近遇到一个需求&#xff0c;需要根据数据库的字段生成表格式的PDF文件并发送邮箱第一步、我们先去官网上面去下载tcpdf的类&#xff1a;http://www.tcpdf.org/或者是从githu…

LightGBM

目录 1.LightGBM的直方图算法(Histogram) 直方图做差加速 2.LightGBM得两大先进技术(GOSS&EFB) 2.1 单边梯度抽样算法(GOSS) 2.2 互斥特征捆绑算法(EFB) 3.LightGBM得生长策略(leaf-wise) 通过与xgboost对比&#xff0c;在这里列出lgb新提出的几个方面的技术 1.Ligh…

JavaScript 评测代码运行速度的几种方法

一、使用 performance.now() API 在 JavaScript 中&#xff0c;可以使用 performance.now() API 来评测代码的运行速度。该 API 返回当前页面的高精度时间戳&#xff0c;您可以在代码执行前后调用它来计算代码执行所需的时间。 例如&#xff1a; let t0 performance.now();…

计算机组成与设计04——处理器

系列文章目录 本系列博客重点在深圳大学计算机系统&#xff08;3&#xff09;课程的核心内容梳理&#xff0c;参考书目《计算机组成与设计》&#xff08;有问题欢迎在评论区讨论指出&#xff0c;或直接私信联系我&#xff09;。 第一章 计算机组成与设计01——计算机概要与技…

idea整合svn

idea整合svn svn下载 链接&#xff1a;https://pan.baidu.com/s/1yS3R3lEE8lm9c9Ap-ndDKg 提取码&#xff1a;65ur 基础步骤 IDED中配置SVN没有svn.exe解决办法 以下是两种解决方案 需要卸载原 svn&#xff08;不推荐&#xff09; 参考网址&#xff1a; https://blog.csdn.…

ansible以及playbook

文章目录1.ansible1.概念2.工作原理3.安装ansible2.playbook1.组件2.角色详解3.剧本语法3.1基本语法3.2常用字段3.3 选项1.ansible 1.概念 ansible是一个可以服务端控制其他机器完成工作的一个应用工具&#xff0c; 1.服务没有客户端存在&#xff0c;通过模块对节点服务器进行…

设计模式--建造者模式 builder

设计模式--建造者模式 builder&#xff09;建造者模式简介建造者模式--小例子&#xff08;电脑购买&#xff09;1.产品类2.抽象构建者3.实体构建类4.指导者类5.客户端测试类小结建造者模式简介 建造者模式有四个角色,概念划分如下&#xff1a; Product &#xff1a; 产品类&a…

docker的基本管理

Docker的概念云计算三层架构服务说明应用IAAS基础设施及服务硬件&#xff08;服务器、网络设置、防火墙等&#xff09;虚拟化网络虚拟化&#xff08;大二层&#xff09;例&#xff1a;openstackPAAS平台及服务环境例&#xff1a;数据库、 docker 、kubernetesSAAS应用及服务应用…

内网渗透(十四)之内网信息收集-域环境中查找域内用户基本信息

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

终于进了字节,记录一下我作为一名测试员磕磕碰碰的三个月找工作经历...

我是裸辞后重新找工作的&#xff0c;从去年到今年&#xff0c;前前后后花了大概三个月&#xff0c;大大小小参加了几百场面试。不是我说&#xff0c;作为一名测试员是真的挺难的&#xff0c;不过很庆幸自己最后拿到了字节的offer&#xff0c;今天在这里做一下记录吧&#xff0c…

从GPT到ChatGPT:我们离那个理想的AI时代到底还有多远?

写在前面 在2023年新年伊始&#xff0c;科技界最为爆火一款产品无疑是OpenAI公司出品的ChatGPT了&#xff0c;作为一名NLP领域从业者&#xff0c;似乎也好久没有看到如此热闹的技术出圈场景了。诚然从现象来看&#xff0c;无论从效果惊艳度、社会效应、商业价值、科技发展方向…

C++【多态】

文章目录1、多态的概念2、多态的定义及实现2-1、多态的构成条件2-2、虚函数2-3、虚函数的重写2-4 多态样例2-5、协变2-6、 析构函数与virtual2-7、函数重载、函数隐藏&#xff08;重定义&#xff09;与虚函数重写&#xff08;覆盖&#xff09;的对比2-8、override 和 final&…