SpringBoot集成Ehcache缓存

2023-05-16

SpringBoot集成Ehcache缓存

Ehcache有两种缓存方式,分别是堆内存、磁盘(非堆内存)。
一、堆内存缓存。也就是MemoryStore,速度最快,不适合存放大量数据。Ehcache规定在使用Cache时必须在CacheManager级别指定可用的内存大小或者是在Cache级别指定可用的内存大小或所允许存放的元素的最大数量。在CacheManager级别指定的内存大小是其内部所有Cache一起所能使用的内存的最大量。CacheManager级别指定内存大小是通过maxBytesLocalHeap来指定的
maxEntriesLocalHeap和maxBytesLocalHeap不能同时使用。
驱除策略:memoryStoreEvictionPolicy。三种选项:LRU(最近最少使用)、LFU(最不常使用)、FIFO(先进先出)
元素过期:timeToLiveSeconds(在不被请求的情况下存在的最长时间秒)、timeToIdleSeconds(在缓存中允许存在的最长时间秒)、eternal(是否永恒true or false)。其中选择eternal其他两项失效
二、磁盘缓存。可以创建很大的缓存。在保存时Ehcache会对元素进行序列化再保存到BigMemory中,然后在读取的时候又会把读取到的字节进行反序列化。需要指定磁盘目录进行存储。
指定容量:CacheManager级别通过maxBytesLocalDisk来指定,Cache级别通过maxBytesLocalDisk和maxEntriesLocalDisk指定
磁盘位置:diskStore元素。<diskStore path="java.io.tmpdir/ehcache"/>
驱除策略和元素过期与内存缓存相同

一、pom

<!‐‐ Spring Boot 缓存支持启动器 ‐‐>
 <dependency>
 	<groupId>org.springframework.boot</groupId>
 	<artifactId>spring‐boot‐starter‐cache</artifactId>
 </dependency>
 <!‐‐ Ehcache 坐标 ‐‐>
 <dependency>
 	<groupId>net.sf.ehcache</groupId>
 	<artifactId>ehcache</artifactId>
 <version>2.10.6</version>
 </dependency>

二、application

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

三、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"
 updateCheck="false">
 <diskStore path = "Java.io.tmpdir"/>
 <defaultCache
 eternal="false" <‐‐意味着该缓存会死亡‐‐>
 maxElementsInMemory="900"<‐‐缓存的最大数目‐‐>
 overflowToDisk="false" <‐‐内存不足时,是否启用磁盘缓存,如果为true则表示启动磁
盘来存储,如果为false则表示不启动磁盘‐‐>
 diskPersistent="false"
 timeToIdleSeconds="0" <‐‐当缓存的内容闲置多少时间销毁‐‐>
 timeToLiveSeconds="60" <‐‐当缓存存活多少时间销毁(单位是秒,如果我们想设置2
分钟的缓存存活时间,那么这个值我们需要设置120)‐‐>
 memoryStoreEvictionPolicy="LRU" <‐‐自动销毁策略‐‐>
 />
 
 <cache
 name="users"
 eternal="false"
 maxElementsInMemory="200"
 overflowToDisk="false"
 diskPersistent="false"
 timeToIdleSeconds="0"
 timeToLiveSeconds="60"
 memoryStoreEvictionPolicy="LRU"
 />

 <cache name="licenseCache"
 eternal="false"
 maxElementsInMemory="10"
 overflowToDisk="false"
 diskPersistent="false"
 timeToIdleSeconds="0"
  timeToLiveSeconds="3600"
 memoryStoreEvictionPolicy="LRU"
 />
 </ehcache>
 <!‐‐<diskStore>==========当内存缓存中对象数量超过maxElementsInMemory时,将缓
存对象写到磁盘缓存中(需对象实现序列化接口) ‐‐>
 <!‐‐<diskStore path="">==用来配置磁盘缓存使用的物理路径,Ehcache磁盘缓存使用的
文件后缀名是*.data和*.index ‐‐>
 <!‐‐name=================缓存名称,cache的唯一标识(ehcache会把这个cache放到Ha
shMap里) ‐‐>
 <!‐‐maxElementsOnDisk====磁盘缓存中最多可以存放的元素数量,0表示无穷大 ‐‐>
 <!‐‐maxElementsInMemory==内存缓存中最多可以存放的元素数量,若放入Cache中的元素
超过这个数值,则有以下两种情况 ‐‐>
 <!‐‐1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件中 ‐‐>
 <!‐‐2)若overflowToDisk=false,则根据memoryStoreEvictionPolicy策略替换Cache
中原有的元素 ‐‐>
 <!‐‐eternal==============缓存中对象是否永久有效,即是否永驻内存,true时将忽略ti
meToIdleSeconds和timeToLiveSeconds ‐‐>
 <!‐‐timeToIdleSeconds====缓存数据在失效前的允许闲置时间(单位:),仅当
eternal=false时使用,默认值是0表示可闲置时间无穷大,此为可选属性 ‐‐>
 <!‐‐即访问这个cache中元素的最大间隔时间,若超过这个时间没有访问此Cache中的某个
元素,那么此元素将被从Cache中清除 ‐‐>
 <!‐‐timeToLiveSeconds====缓存数据在失效前的允许存活时间(单位:),仅当
eternal=false时使用,默认值是0表示可存活时间无穷大 ‐‐>
 <!‐‐即Cache中的某元素从创建到清楚的生存时间,也就是说从创建开始计时,当超过这个
时间时,此元素将从Cache中清除 ‐‐>
 <!‐‐overflowToDisk=======内存不足时,是否启用磁盘缓存(即内存中对象数量达到maxE
lementsInMemory时,Ehcache会将对象写到磁盘中) ‐‐>
 <!‐‐会根据标签中path值查找对应的属性值,写入磁盘的文件会放在path文件夹下,文件
的名称是cache的名称,后缀名是data ‐‐>
 <!‐‐diskPersistent=======是否持久化磁盘缓存,当这个属性的值为true时,系统在初始
化时会在磁盘中查找文件名为cache名称,后缀名为index的文件 ‐‐>
 <!‐‐这个文件中存放了已经持久化在磁盘中的cache的index,找到后会把cache加载到内
存 ‐‐>
 <!‐‐要想把cache真正持久化到磁盘,写程序时注意执行net.sf.ehcache.Cache.put(El
ement element)后要调用flush()方法 ‐‐>
 <!‐‐diskExpiryThreadIntervalSeconds==磁盘缓存的清理线程运行间隔,默认是120秒
‐‐>
 <!‐‐diskSpoolBufferSizeMB============设置DiskStore(磁盘缓存)的缓存区大小,
默认是30MB ‐‐>
 <!‐‐memoryStoreEvictionPolicy========内存存储与释放策略,即达到maxElementsIn
Memory限制时,Ehcache会根据指定策略清理内存 ‐‐>
 <!‐‐共有三种策略,分别为LRU(Least Recently Used 最近最少使用)LFU(Less Fre
quently Used最不常用的、FIFO(first in first out先进先出) ‐‐>

四、存取注解使用

public class EhcacheDataServiceImpl implements EhcacheDataService {
    @Override
    @Cacheable(key = "'AccessToken'")
    public AccessToken getAccessToken() {
        log.info("正在请求");
        return getTokenFromZvizer();
    }

    @Override
    @CachePut(key = "'AccessToken'")
    public AccessToken updateAccessToken() {
        log.info("正在更新");
        return getTokenFromZvizer();
    }
	//@CacheEvict 用于delete
 }

五、启动
方法和启动类添加注解@EnableCaching

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot集成Ehcache缓存 的相关文章

随机推荐

  • 【转载】关于Visual Studio、VC和C++的那些事

    size 61 medium 首先 xff0c 这三个东西有什么区别呢 xff1f VC和C 43 43 是相同的吗 xff0c 有什么区别呢 xff1f 我刚开始学C 43 43 的时候也有这样的问题 xff0c 在这里我来替大家解释一下
  • Byte、bit 、和16进制之间的关系

    bit xff08 比特 xff09 byte xff08 字节 xff09 一 bit xff08 比特 xff09 计算机内存储和处理信息的最小单位是位 xff08 bit 或比特 xff09 xff0c 一个比特值可以是0或1 xff
  • ROS常见问题1——找不到包

    ROS常见问题1 找不到包 1 问题 每次打开终端会提示找不到相关包或者相关文件 比如在查看自己在catkin工作区间下创建的消息时提示找不到文件 xff1a 输入 xff1a span class hljs variable span r
  • 架空线路的基本结构及组成

    最近没有什么实时的新闻发 xff0c 所以小编就给大家整理了一些干货 准备好了吗 xff1f 具体是什么干货呢 xff1f 这句话问的好 xff0c 今天小编就给大家聊一聊电力巡检的基本知识 xff1a 架空线路的基本构成及组成 架空输电线
  • 微信小程序云开发,数据库数据的增加

    1 在wxml中添加一个按钮绑定事件 xff0c 添加数据 2 在云数据库中新建一个数据文件夹list 3 在JS中添加数据 4 在数据库中即可有增加的数据
  • Anaconda如何成功配置OpenCV的开发环境

    1 打开Anaconda的运行环境 xff1a 点击Anaconda Prompt运行 2 进入环境 使盘符在Anaconda 安装目录下 进入Scripts文件夹下 xff1b 3 找到相应路径位置 xff1a 4 敲代码运行到相应盘符
  • jupyter notebook快速入门使用详解及标记的使用(Markdown使用笔记)

    1 软件 xff08 终端的打开 xff09 打开软件之后 xff0c Jupyter Notebook 将在你的默认浏览器中打开 xff0c 网址为 xff1a http localhost 8888 tree 在某些情况下 xff0c
  • F3飞控的调试

    http www moz8 com thread 109506 1 1 html
  • 航模飞机设计基础知识

    部分引用源1 xff1a KSP飞机设计简易指南 http tieba baidu com p 2272016546 FAR进阶气动稳定性和控制教程 http bbs deeptimes org forum php mod 61 viewt
  • SLA技术3D打印机的原理

    SLA是Stereo lithography Appearance的缩写 xff0c 即立体光固化成型法 用特定波长与强度的激光聚焦到光固化材料表面 xff0c 使之由点到线 xff0c 由线到面顺序凝固 xff0c 完成一个层面的绘图作业
  • STM32F103C8T6读取气压计MS5611,I2C读取模式

    笔者最近想用气压计模块来测一下相对高度 xff0c 使用的元器件如下图所示 所使用的最小系统板 所使用的气压计模块 其实读取还是蛮简单的 xff0c 根据核心板引脚图选择I2c接口 xff0c 然后借鉴正点原子的模拟i2c程序 xff0c
  • keil 的头文件

    许多初学者使用网上下载的程序时都会遇到这样一个问题 xff0c 就是头文件找不到 我想就这个问题说明一下 首先 xff0c 我们用到的KEIL有几种版本的 xff0c 头文件也不同 有reg51 h和at89x51 h两种比较常见 at89
  • 关于串口的初始化Uart_Init(0, 115200)

    void Uart Init int pclk int baud int i if pclk 61 61 0 因为Main c 中定义了 GLOBAL CLK 61 1 所以 PCLK 在 option h 中定义 在Main c 中的设置
  • 【学习笔记】Ubuntu双系统+搭建个人服务器

    Ubuntu双系统 43 搭建个人服务器 前言1 Ubuntu 43 Win双系统1 1 制作U盘启动盘1 2 系统分盘1 3 安装Ubuntu系统 2 搭建个人服务器2 1 设置root2 2 配置ssh2 3 向日葵连接 3 内网穿透3
  • IMU 测量模型和运动学模型

    一 概念 高斯白噪声 测量噪声是AD转换器件引起的外部噪声 xff0c 波动激烈的测量白噪声 随机游走 这里指零偏Bias 随机游走噪声 xff0c 是传感器内部机械 温度等各种物理因素产生的传感器内部误差的综合参数 xff0c 是变化缓慢
  • java参数校验注解

    java参数校验注解 java中前后台参数传递时如何对参数进行校验 校验主要使用到 javax validation类 一 引入依赖 SpringBoot的web组件中已引入validation的jar包 xff0c 但也可自行引入 spa
  • SpringBoot集成阿里easyexcel(三)CellWriteHandler图片转换

    继承单元格处理器 xff0c 通过重写不同方法 xff0c 对单元格进行处理 span class token keyword public span span class token keyword class span span cla
  • 使用Mybatis-plus拦截加密数据

    使用Mybatis plus拦截加密数据 使用自定义注解来标识需要加密的po和字段 xff0c 并通过mybaitsplus的插件工具类Interceptor类来实现对数据的拦截与加密转换操作 一 自定义加密注解 作用在类上的注解 pack
  • SpringBoot集成阿里easyexcel(四)Converter导入导出数据转换器

    SpringBoot集成阿里easyexcel xff08 四 xff09 Converter导入导出数据转换器 通过com alibaba excel converters Converter转换器实现Excel导入导出时Java数据与E
  • SpringBoot集成Ehcache缓存

    SpringBoot集成Ehcache缓存 Ehcache有两种缓存方式 xff0c 分别是堆内存 磁盘 xff08 非堆内存 xff09 一 堆内存缓存 也就是MemoryStore xff0c 速度最快 xff0c 不适合存放大量数据