springboot ehcache缓存使用及自定义缓存存取

Spring Boot学习(五):集成ehcache,自定义存取 项目中需要使用到缓存,缓存一些机构登录信息。这是一个实现数据共享接口的项目,不大,经过比较使用了ehcache实现,权限登录验证使用的自定义方法,没有使用shiro等成熟框架。 1.项目环境 IDEA + maven + Spring Boot 2.代码实现 1)pom.xml文件引入必要依赖 <!--cache--> <dependency> <... 阅读详情

添加依赖
首先在pom.xml添加必要依赖


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

添加依赖时会提示net.sf.ehcache已经集成在springboot里边,但是不加程序又提示找不到net.sf.ehcache.CacheManager的class文件。该问题需要朋友们解决一下。
开启缓存
在Spring Boot环境下,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在配置类上使用@EnableCaching开启缓存即可。
在启动类添加注解@EnableCaching

@SpringBootApplication
@EnableCaching
public class MyTestApplication  {
    private static Logger log=LoggerFactory.getLogger(MyTestApplication .class);
    public static void main(String[] args) {
        SpringApplication.run(MyTestApplication .class, args);
        log.info("服务启动成功");
    }
}

新建数据库表

CREATE TABLE `paraconfig` (
  `paraId` int(11) NOT NULL AUTO_INCREMENT COMMENT '参数id',
  `paraName` varchar(20) NOT NULL COMMENT '参数名称',
  `paraCode` varchar(50) NOT NULL COMMENT '参数值',
  `paraDesc` varchar(100) DEFAULT NULL COMMENT '参数描述',
  `status` enum('有效','无效') NOT NULL COMMENT '参数状态',
  PRIMARY KEY (`paraId`),
  UNIQUE KEY `paraName` (`paraName`) USING BTREE,
  KEY `paraStatus` (`status`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

新建实体类

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Paraconfig implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private Integer paraid;
    private String paraname;
    private String paracode;
    private String paradesc;
    private String status;
    public Integer getParaid() {
        return paraid;
    }
    public void setParaid(Integer paraid) {
        this.paraid = paraid;
    }
    public String getParaname() {
        return paraname;
    }
    public void setParaname(String paraname) {
        this.paraname = paraname;
    }
    public String getParacode() {
        return paracode;
    }
    public void setParacode(String paracode) {
        this.paracode = paracode;
    }
    public String getParadesc() {
        return paradesc;
    }
    public void setParadesc(String paradesc) {
        this.paradesc = paradesc;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @Override
    public String toString() {
        return "Paraconfig [paraid=" + paraid + ", paraname=" + paraname + ", paracode=" + paracode + ", paradesc="
                + paradesc + ", status=" + status + "]";
    }

}

新建dao查询数据库接口

import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import com.xx.model.Paraconfig;
public interface IParaConfigDao extends JpaRepository<Paraconfig,Integer>{
    public Paraconfig findByParaid(Integer id);
    public Paraconfig findByParaname(String name);
    public List<Paraconfig> findByStatus(String status);
}

新建数据库操作服务及实现

import java.util.List;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import com.xx.model.Paraconfig;
public interface IParaConfigService {
    @CacheEvict(value = "SystemCache")
    public int deletePara(int id);

    @CachePut(value = "SystemCache", key = "#para.paraid") 
    public Paraconfig addPara(Paraconfig para);

    @Cacheable(value = "SystemCache", key = "#id") 
    public Paraconfig findOne(int id);

    @Cacheable(value = "SystemCache", key = "#name") 
    public Paraconfig findByName(String name);

    @Cacheable(value = "SystemCache") 
    public List<Paraconfig> findAll();

    @Cacheable(value = "SystemCache") 
    public List<Paraconfig> findByStatus(String status);

    @CachePut(value = "SystemCache", key = "#para.paraid") 
    public Paraconfig updataPara(Paraconfig para);
}

import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xx.DatabaseSservice.paraConfig.IParaConfigService;
import com.xx.dao.IParaConfigDao;
import com.xx.model.Paraconfig;

@Service
public class ParaConfigServiceImpl implements IParaConfigService{
    private Logger log=LoggerFactory.getLogger(ParaConfigServiceImpl.class);
    @Autowired
    private IParaConfigDao dao;
    @Override
    public int deletePara(int id) {
        log.info("o==||======>删除系统参数入参ID="+id);
        int result=0;
        try{
            dao.deleteById(id);
            result=0;
        }catch(Exception e){
            e.printStackTrace();
            result=-1;
            log.info("删除系统参数异常");
        }
        return result;
    }
    @Override
    public Paraconfig addPara(Paraconfig para) {
        log.info("o==||=====>新增系统参数入参:"+para.toString());
        return doExecute("addPara",null,para);
    }
    @Override
    public Paraconfig findOne(int id) {
        log.info("o==||=====>id查找系统参数入参:id="+id);
        return doExecute("findOne",String.valueOf(id),null);
    }
    @Override
    public Paraconfig findByName(String name) {
        log.info("o==||=====>name查找系统参数入参:name="+name);
        return doExecute("findByName",name,null);
    }
    @Override
    public List<Paraconfig> findAll() {
        log.info("o==||=====>查找All系统参数");
        return doExecutePage("findAll",null);
    }
    @Override
    public List<Paraconfig> findByStatus(String status) {
        log.info("o==||=====>status查找系统参数:status="+status);
        return doExecutePage("findByStatus",status);
    }
    @Override
    public Paraconfig updataPara(Paraconfig para) {
        log.info("o==||=====>更新系统参数入参:"+para.toString());
        return doExecute("updataPara",null,para);
    }

    public Paraconfig doExecute(String type,String arg,Paraconfig req){
        Paraconfig resp=new Paraconfig();
        try{
            switch(type){
                case "addPara" : ;
                case "updataPara" : resp=dao.save(req);break;
                case "findOne" : resp=dao.findByParaid(Integer.valueOf(arg));break;
                case "findByName" : resp=dao.findByParaname(arg);break;
            }
        }catch(Exception e){
            e.printStackTrace();
            String Emsg = null;
            switch(type){
                case "addPara" : Emsg="新增系统参数异常";break;
                case "updataPara" : Emsg="更新系统参数异常";break;
                case "findOne" : Emsg="根据ID查找系统参数异常";break;
                case "findByName" : Emsg="根据name查找系统参数异常";break;
            }
            log.info(Emsg+e.getMessage());
        }finally{
            log.info("查找系统参数返回:"+(resp==null?null:resp.toString()));
        }
        return resp;
    }

    public List<Paraconfig> doExecutePage(String type,String arg){
        List<Paraconfig> resp = null;
        try{
            switch(type){
                case "findAll" : resp=dao.findAll();break;
                case "findByStatus" : resp=dao.findByStatus(arg);break;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            log.info("查找系统参数返回:"+(resp==null?null:resp.toString()));
        }
        return resp;
    }
}

新建测试controller

@PostMapping("/testCachefindOne")
    public void testCachefindOne(){
        Paraconfig para=null;
        try{
            para=paraConfigService.findOne(1);
        }catch(Exception e){
            e.printStackTrace();
            log.info("异常:"+e.getMessage());
        }
    }

测试
使用postman请求。查看控制执行数据库操作日志。
第一次请求缓存没有则有日志打印,第二次请求缓存有数据则不会打印日志。
测试没有问题说明缓存自动存储已经没问题了,接下来就是怎么取缓存及添加自定义的缓存了。
添加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">
         <diskStore path="java.io.tmpdir/Tmp_EhCache" />  
    <defaultCache  
            eternal="false"  
            maxElementsInMemory="1000"  
            overflowToDisk="false"  
            diskPersistent="false"  
            timeToIdleSeconds="0"  
            timeToLiveSeconds="100"  
            memoryStoreEvictionPolicy="LRU" />  

    <cache  
            name="SystemCache"  
            eternal="false"  
            maxElementsInMemory="100"  
            overflowToDisk="false"  
            diskPersistent="false"  
            timeToIdleSeconds="0"  
            timeToLiveSeconds="30"  
            memoryStoreEvictionPolicy="LRU" />  
</ehcache>

配置文件详解

(1).diskStore: 为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。参数解释如下:    
user.home – 用户主目录
user.dir  – 用户当前工作目录
java.io.tmpdir – 默认临时文件路径
(2).defaultCache:默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。
(3).cache:自定缓存策略,为自定义的缓存策略。参数解释如下:
cache元素的属性:
name:缓存名称
maxElementsInMemory:内存中最大缓存对象数
maxElementsOnDisk:硬盘中最大缓存对象数,若是0表示无穷大
eternal:true表示对象永不过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false
overflowToDisk:true表示当内存缓存的对象数目达到了maxElementsInMemory界限后,会把溢出的对象写到硬盘缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。
diskSpoolBufferSizeMB:磁盘缓存区大小,默认为30MB。每个Cache都应该有自己的一个缓存区。
diskPersistent:是否缓存虚拟机重启期数据
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认为120秒
timeToIdleSeconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态
timeToLiveSeconds:设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值,这个对象就会过期,EHCache将把它从缓存中清除。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds属性,才有意义
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。

将配置文件放在src/main/resources下(或其他路径,需要配置路径)。
新建ApplicationContextUtils实现ApplicationContextAware接口

import org.springframework.beans.BeansException;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component  
@EnableAutoConfiguration  
public class ApplicationContextUtils implements ApplicationContextAware{
     public static ApplicationContext applicationContext=null;//可写成单利模式,这里为了方便  
     @Override  
     public void setApplicationContext(ApplicationContext arg0) throws BeansException {
         applicationContext=arg0;
         System.out.println("设置ApplicationContext成功!");
    }  
}

缓存自定义存取

@PostMapping("/testCachefindOne")
    public void testCachefindOne(){
        Paraconfig para=null;
        try{
            para=paraConfigService.findOne(1);
            EhCacheCacheManager cacheCacheManager=ApplicationContextUtils.applicationContext.getBean(EhCacheCacheManager.class); 
            //获取Cache  
            Cache cache=cacheCacheManager.getCache("SystemCache");  
            cache.put("Hello-key", "Hello-value");
            System.out.println("缓存名:"+cache.getName());
            System.out.println("缓存Hello-key:"+cache.get("Hello-key", String.class));
            System.out.println("缓存SYSDATE:"+cache.get("SYSDATE",Paraconfig.class));
        }catch(Exception e){
            e.printStackTrace();
            log.info("异常:"+e.getMessage());
        }
    }

启动测试
这里写图片描述

小结:
1.@CachePut表示缓存新添加的数据或者更新的数据到缓存中,两个参数value表示缓存的名称为SystemCache,key表示缓存的key为#id 的数据,#id为方法参数 。
2.@CacheEvict表示从缓存SystemCache中删除key为id的数据
3.@Cacheable表示添加数据到缓存中,缓存名称为SystemCache,缓存key为#para.paraid的数据。
注意: @CachePut总会执行SQL操作,其主要用在更新或插入数据时。
@Cacheable主要用在查询数据库时,缓存有则不查数据库。

SpringBoot 集成Shiro之使用Redis缓存授权认证信息 因为用户认证与授权需要从数据库中查询并验证信息,但是对于权限很少改变的情况,这样不断从数据库中查询角色验证权限,对整个系统的开销很大,对数据库压力也随之增大。因此可以将用户认证和授权信息都缓存起来,第一次缓存没有的时候会自动从数据库中获取,并添加到缓存中;如果缓存中已经有该登录用户的认证和权限信息就直接从缓存中拿。 使用CacheManager Cache的作用 用来减轻数据库的访问压力,从而提升查询效率。 流程 使用默认的EhCache实现缓存 1、引入Ehcache相关依赖 <!. 阅读详情

相关推荐

[springboot专栏]整合EhCache实现单服务缓存

在Spring框架内我们首选Spring Cache作为缓存框架的门面,之所以说它是门面,是因为它只提供接口层的定义以及AOP注解等,不提供缓存的具体存取操作。缓存的具体存储还需要具体的缓存存储,比如EhCache 、Redis等。Spring Cache与缓存框架的关系有点像SLF4j与logback、log4j的关系。...

字母哥博客 782

ehcache缓存的使用及配置

一.介绍与应用场景 ehcache是一开源缓存工具,其许可证为Apache License, Version 2.0,非常友好的许可。在 sourceforge.NET 上可找到它的最新版本。 缓存应用在多个领域并发挥作用,ehcache可应用于数据库访问缓存,安全认证缓存,web缓存,soap 和 RESTFul 服务缓存,应用程序持久对象缓存以及分布式缓存。 二.架设开发环境 无它

QC班长的博客 1万+

SpringBoot+MyBatis+Ehcache缓存数据实战

除了上述配置外,开发者还可以根据需要添加更多的自定义配置属性。这些属性的加载顺序为:默认值指定的配置文件位置的或中的自定义配置环境变量命令行参数通过这种方式,SpringBoot保证了配置的灵活性,使得开发者可以根据具体需求配置不同级别的缓存属性。# 设置自定义的缓存配置属性此配置允许指定另一个自定义的Ehcache配置文件,以实现更精细的缓存管理。

weixin_29935511的博客 867

Springboot集成ehcache时获取CacheManager自定义添加其他缓存

问题引入:当我spring集成ehcache的时候全程使用注解开发,需要缓存就在方法上添加@Cacheable注解(这里不讨论如何集成和使用,自行百度),有时候如果我们需要自己加缓存,并不想用注解作用在方法上,那该怎么办呢? 第一步:获取ApplicationContext,编写ApplicationContextUtils 类,实现ApplicationContextAware 接口 @Co

莫莫的博客 1万+

Qt中常见的面试题总结

基于Qt开发的一些常用面试题

一名热爱编程的程序员 8493

Oracle PLM Agile936 单点登录配置方式

Oracle PLM Agile936 单点登录配置方式

Jay的个人博客 824

SpringBoot项目中使用缓存Cache的正确姿势

缓存可以通过将经常访问的数据存储在内存中,减少底层数据源如数据库的压力,从而有效提高系统的性能和稳定性。if(user!= null) {// 从数据库获取复制代码其实Spring Boot 提供了强大的缓存抽象,可以轻松地向您的应用程序添加缓存。本文就讲讲如何使用 Spring 提供的不同缓存注解实现缓存的最佳实践。默认的缓存管理器并不能满足需求,因为她是存储在jvm内存中的,那么如何存储到redis中呢?这时候需要添加自定义的缓存管理器。添加依赖复制代码配置Redis缓存管理器。

2301_76607156的博客 1472

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2493

Caused by: java.lang.ClassNotFoundException: net.sf.ehcache.CacheManager

shiro中添加了cache的时候,显示了一下错误,导致的原因使我们常见的找不见响应的类的错误Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private cn.itcast.bos.service.system.UserService cn.itcast.b

fcfwang_net的博客 7461

Python量化交易实战:从零搭建你的第一个多因子选股模型(附完整代码)

本文是一份详细的Python量化交易入门实战指南,手把手教你从零搭建第一个多因子选股模型。内容涵盖环境配置、数据获取、因子挖掘与有效性检验、多因子合成以及完整的策略回测与绩效评估,并附有可直接运行的完整代码,帮助初学者快速掌握量化交易的基本概念与实践流程。

resnet7explorer的博客 936

从拧螺丝到精密装配:三菱伺服电机扭矩控制在工业自动化中的实战解析

本文深入解析三菱伺服电机扭矩控制在工业自动化中的实战应用,重点介绍MR-J4系列伺服系统的高精度扭矩响应技术。从螺丝紧固到精密装配,详细讲解扭矩控制模式的选择、硬件配置、参数设置及典型故障排查方案,帮助工程师提升生产效率和产品质量。

weixin_29186249的博客 471

Springboot使用Ehcache做持久化缓存

最近在做的功能模块需要长久存储一项(仅一项)且即使服务重启后也可以查询到的数据,每天更新一次。 一开始不知道ehcache能做持久化缓存⊙﹏⊙‖,心想缓存不能用,那只能数据表了,但是因为一项数据建一张数据表好像有些没必要,瞬间没了思路。后来向同事请教,同事说可以尝试用ehcache持久化缓存。于是,我又get新技能了哈~~记录一下吧。 1、导入jar包 <dependency>...

Peacock__的博客 9831

从SN65HVD230芯片手册出发,手把手教你搞定3.3V CAN收发器电路(附典型应用图)

本文详细解析TI SN65HVD230芯片手册,指导完成3.3V CAN收发器电路设计。从关键参数解读到基础电路搭建,再到高级功能实现与EMC优化,提供完整的接口电路设计方案,并附典型应用图和故障排查指南,助力开发者提升CAN总线通信质量。

weixin_29997523的博客 507

springboot本地缓存ehcache存取数据,cacheable缓存

直接上代码,原来自己看 1、在resource下新建ehcache.xml <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://e...

幼儿园大班扛把子 2124

看懂 SAP S/4HANA 产品主数据里的 GTIN:一串号码背后的全球商品识别与业务协同

SAP S/4HANA中的GTIN管理是企业供应链运营的关键环节。本文深入解析GTIN的业务内涵及其在SAP系统中的实现方式:1) GTIN是全球通用的商品标识码,不同于企业内部物料编码;2) SAP主数据中GTIN与计量单位强绑定,需为不同包装层级维护独立GTIN;3) 同一产品可能因渠道、供应商差异存在多个GTIN;4) GTIN贯穿零售POS、仓储管理、EDI订单等核心业务流程;5) 通过典型案例说明错误维护GTIN将导致收银异常、仓库作业低效等运营问题。文章强调GTIN管理需结合包装层级、计量单位等

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1433

AUTOSAR从入门到精通-复杂设备驱动(CDD)

CDD是复杂设备驱动的首字母缩写主要为驱动程序或复杂驱动程序,但不限于驱动程序。复杂驱动程序是一种未被AUTOSAR标准化的软件实体,可以通过AUTOSAR接口和/或基本软件模块api访问。 CDD是位于基础软件复杂驱动层的特定模块,与标准BSW模块或Rte交互。 CDD可能需要与分层软件体系结构的模块连接 分层软件架构的模块可能需要连接到CDD CDD可能需要通过Rte连接swc。

getusushu的博客 4194

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_博客 3180

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

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

SpringBoot + EhCache实现本地缓存

一、EhCache 介绍 1.1 什么是EhCache ? EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。 Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Ehcache)

oyc的博客 2696

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机控制技术及应用

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

SpringBoot整合Ehcache缓存(二十二)

主要内容: 1. 整合ehcache缓存 2. ehcache缓存配置文件内容 3. spring cache的注解的相关用法

两个蝴蝶飞 2929

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

在springboot3.x中使用Ehcache3.x

在这个示例中,我们定义了一个名为"default"的缓存模板,并设置了键的类型、值的类型、过期策略和资源配置。然后,我们定义了两个具体的缓存实例,它们分别继承了"default"模板,但其中一个覆盖了过期时间。在src/main/resources目录下创建ehcache.xml文件,并配置缓存的相关信息,如缓存名称、内存和磁盘存储配置、缓存失效策略等。它可以从配置文件中加载缓存配置,创建和管理多个缓存实例。管理缓存项的访问顺序,确保最近使用的数据项保持在缓存的前部,而最不常使用的数据项位于缓存的尾部。

Kwoky的博客 2222

SpringBoot整合Ehcache3

前言 公司部门老项目要迁移升级java版本,需要进行缓存相关操作,原框架未支持这部分,经过调研java相关缓存方案大致分为ehcache和redis两种,redis的value最大值为500mb且超过1mb会对存取有性能影响,业务系统需要支持列表查询缓存就不可避免的涉及到大量的数据存取过滤,ehcache支持内存+磁盘缓存不用担心缓存容量问题,所以框架初步版本决定集成ehcache3,设计流程结构如下图所示 缓存配置 maven引用 <dependency>

月月鸟先森的博客 4667

springboot集成ehcache_Ehcache在SpringBoot中的实践

Ehcache,一个纯Java的进程内存缓存框架。本地缓存相比较于分布式缓存(例如Redis等)而言,由于避免网络IO通讯的开销故效率非常高。这里就如何在SpringBoot下进行集成、应用来进行介绍依赖在POM文件中添加如下依赖<!--EhCache--> <dependency> <groupId>org.springframework.boot&l...

weixin_39627665的博客 144

SpringBoot使用本地缓存——Caffeine

Caffeine是一个高性能的Java本地缓存库,设计用于提供快速响应时间和高并发处理能力。它具有类似于Guava缓存的简单易用的API,同时也提供了许多额外的功能和性能优化。Caffeine支持缓存大小限制、缓存过期策略、异步加载数据等特性,可以帮助开发人员在应用程序中有效地管理和优化缓存。Caffeine还提供了可自定义的缓存策略和监听器,以帮助开发人员根据实际需求定制缓存行为。

pig_boss的博客 3158

ehcache springboot_springboot系列:如何正确使用和配置缓存

前言:springboot已经为我们实现了抽象的api接口,因此当我们使用不同的缓存时,只是配置有可能有点区别(比如ehcache和Redis),但是在程序中使用缓存的方法是一样的。1.springboot使用ehcache缓存1.步骤:1.在pom.xml中配置2个依赖,添加spring-boot-starter-cache启动器,以及ehcache。 net.sf.ehcache ehcach...

weixin_39787089的博客 170

Springboot应用缓存实践之:Ehcache加持

概述 在如今高并发的互联网应用中,缓存的地位举足轻重,对提升程序性能帮助不小。而3.x开始的 Spring也引入了对 Cache的支持,那对于如今发展得如火如荼的 Spring Boot来说自然也是支持缓存特性的。当然 Spring Boot默认使用的是 SimpleCacheConfiguration,即使用ConcurrentMapCacheManager 来实现的缓存。但本文将讲述如何将 E...

javarrr的博客 227

Ehcache和Redis封装接口(支持缓存切换)

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。4、持久化:Ehcache数据持久化较弱;3、应用场景:Ehcache更适合用于中小型应用;Redis更适合用于大数据缓存、数据恢复等场景。EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点。3、编写Ehcache实现类,实现CacheService缓存接口。3、编写Redis实现类,实现CacheService缓存接口。4、最后通过配置控制使用哪一种缓存,支持缓存的切换。

sz_542的博客 1062
上一篇: java读取远程图片缺失或者不全
下一篇: springboot集成elastic-job时@Autowired注入service和dao都为空
open_yu
博客等级 码龄9年 4粉丝 18原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值