前言

业务需要将数据临时存储一下,但是想做一个搭建轻量级应用,不需要任何第三方中间件(考虑过MySQL、Redis等都比较麻烦)。
Java EhCache是一个轻量级内存缓存,也支持持久化,所以采用该种方式。

配置

引入依赖

<dependencies><!-- spring boot 单元测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- SpringBoot 缓存 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><!-- ehcache --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
</dependencies>

启动类添加开启缓存注解

package com.terry;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;/*** ehcache demo* @author terry* @version 1.0* @date 2022/4/18 11:38*/
@SpringBootApplication
@EnableCaching
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

ehcache.xml配置

<!-- ehcache配置 -->
<ehcachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"updateCheck="false"><!--缓存路径,用户目录下的base_ehcache目录--><diskStore path="base_ehcache"/><!--默认缓存可以设置文件名:user,同样的可以配置多个缓存maxElementsInMemory:内存中最多存储eternal:外部存储overflowToDisk:超出缓存到磁盘diskPersistent:磁盘持久化timeToLiveSeconds:缓存时间diskExpiryThreadIntervalSeconds:磁盘过期时间(秒为单位,0 为永久)--><defaultCachemaxElementsInMemory="20000"eternal="true"timeToIdleSeconds="0"timeToLiveSeconds="0"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="true"diskExpiryThreadIntervalSeconds="0"memoryStoreEvictionPolicy="LRU"/></ehcache>

application.yml 配置


spring:# 缓存配置cache:type: ehcacheehcache:config: classpath:ehcache.xml

实战

增删改查例子

package com.terry.ehcache.test;import com.terry.App;
import lombok.extern.java.Log;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Map;/*** ehcache 增删改查测试* @author terry* @version 1.0* @date 2022/4/25 23:01*/
@SpringBootTest(classes = App.class)
@Log
public class TestEhCache {@Autowiredprivate CacheManager cacheManager;@Testpublic Cache getCache(){String cacheName = "user";Cache user = cacheManager.getCache(cacheName);if (user == null) {cacheManager.addCache(cacheName);user = cacheManager.getCache(cacheName);}return user;}@Testpublic void addUser(){Cache cache = getCache();// 添加一个用户,key:user01,value:张三cache.put(new Element("user01", "张三"));}@Testpublic void getUser(){Cache cache = getCache();log.info(cache.get("user01").getObjectValue().toString());}@Testpublic void removeUser(){Cache cache = getCache();cache.remove("user01");// 获取所有的keyslog.info(cache.getKeys().toString());}@Testpublic void getUserAll(){Cache cache = getCache();cache.put(new Element("user01", "张三"));cache.put(new Element("user02", "李四"));cache.put(new Element("user03", "王五"));cache.put(new Element("user04", "赵六"));// 获取所有的keysMap<Object, Element> all = cache.getAll(cache.getKeys());all.forEach((k, v) -> {log.info("key:" + k + ", value:" + v.getObjectValue().toString());});}
}

使用SpringBoot Cache注解

package com.terry.ehcache.service;import lombok.Data;
import lombok.extern.java.Log;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;/*** 用户服务层* @author terry* @version 1.0* @date 2022/4/18 14:35*/
@Service
@Log
public class UserService {@Cacheable(cacheNames = "user")public List<User> getUser(){log.info("添加进缓存");// 模拟数据库List<User> list = new ArrayList<>();list.add(new User("张三", 18));list.add(new User("李四", 18));return list;}@Datapublic static class User implements Serializable {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}}
}

封装工具类

import lombok.extern.slf4j.Slf4j;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;/*** ehcache 工具类* @version 1.0* @author terry* @date 2022/4/22*/
@Slf4j
@Component
public class EhcacheService {@Autowiredprivate CacheManager cacheManager;/*** 获得一个Cache,没有则创建一个。* @return*/private Cache getCache(){return getCache(EhcacheEnum.CACHE_NAME);}/*** 获得一个Cache,没有则创建一个。* @param cacheName* @return*/public Cache getCache(String cacheName){Cache cache = cacheManager.getCache(cacheName);if (cache == null){cacheManager.addCache(cacheName);cache = cacheManager.getCache(cacheName);cache.getCacheConfiguration().setEternal(true);}return cache;}/*** 放置缓存(带过期时间)* @param key* @param value* @param timeToLiveSeconds*/public void setCacheElement(String key, Object value,int timeToLiveSeconds) {Element element = new Element(key, value);element.setEternal(false);element.setTimeToLive(timeToLiveSeconds);getCache().put(element);}/*** 放置缓存(带过期时间)* @param cacheName* @param key* @param value* @param timeToLiveSeconds*/public void setCacheElement(String cacheName, String key, Object value,int timeToLiveSeconds) {Element element = new Element(key, value);element.setEternal(false);element.setTimeToLive(timeToLiveSeconds);getCache(cacheName).put(element);}/*** 放置缓存(永久)* @param key* @param value*/public void setCacheElement(String key, Object value) {Element element = new Element(key, value);element.setEternal(false);getCache().put(element);}/*** 放置缓存(永久)* @param cacheName* @param key* @param value*/public void setCacheElement(String cacheName, String key, Object value) {Element element = new Element(key, value);element.setEternal(false);getCache(cacheName).put(element);}/*** 设置过期时间* @param key* @param seconds* @return*/public long expire(String key,int seconds) {Element element = getCache().get(key);element.setEternal(false);element.setTimeToLive(seconds);return 0;}/*** 设置过期时间* @param key* @param cacheName* @param seconds* @return*/public long expire(String key,String cacheName, int seconds) {Element element = getCache(cacheName).get(key);element.setEternal(false);element.setTimeToLive(seconds);return 0;}/*** 获取缓存值* @param key* @return*/public Object getCacheValue(String key) {Element element = getCache().get(key);if(element != null){return element.getObjectValue();}return null;}/*** 获取缓存值* @param cacheName* @param key* @return*/public Object getCacheValue(String cacheName, String key) {Element element = getCache(cacheName).get(key);if(element != null){return element.getObjectValue();}return null;}/*** 根据key删除缓存* @param cacheName* @return*/public Map<Object, Element> getCacheAll(String cacheName) {Cache cache = getCache(cacheName);return cache.getAll(cache.getKeys());}/*** 根据key删除缓存* @param cacheName* @param key* @return*/public Boolean removeCacheKey(String cacheName, String key) {return getCache(cacheName).remove(key);}/*** 获取缓存过期时间* @param key* @return*/public int getCacheExpire(String key) {Element element = getCache().get(key);List keys = getCache().getKeys();if(element != null){return element.getTimeToLive();}return 0;}/*** 获取缓存过期时间* @param cacheName* @param key* @return*/public int getCacheExpire(String cacheName, String key) {Element element = getCache(cacheName).get(key);if(element != null){return element.getTimeToLive();}return 0;}}

Java轻量级缓存Ehcache与SpringBoot整合相关推荐

  1. 2、ehcache与springBoot整合

    有了前面springBoot整合redis时分析的,用redis来做spring缓存注解的实现原理后,再整合ehcache来做spring缓存注解的实现就非常简单了.时光隧道:springBoot2. ...

  2. java redis缓存实例_spring项目整合ehcache和redis缓存实例

    项目描述 Spring的缓存机制非常灵活,可以对容器中任意Bean或者Bean的方法进行缓存,因此这种缓存机制可以在JavaEE应用的任何层次上进行缓存. Spring缓存底层也是需要借助其他缓存工具 ...

  3. iBase4J是Java的分布式系统架构 使用Springboot整合开源框架

    iBase4J项目简介 iBase4J是Java语言的分布式系统架构. 使用Spring整合开源框架. 使用Maven对项目进行模块化管理,提高项目的易开发性.扩展性. 系统包括4个子系统:系统管理S ...

  4. 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

  5. 8分钟带你学会SpringBoot整合Redis来实现缓存技术

    1.概述 随着互联网技术的发展,对技术要求也越来越高,所以在当期情况下项目的开发中对数据访问的效率也有了很高的要求,所以在项目开发中缓存技术使用的也越来越多,因为它可以极大的提高系统的访问速度,关于缓 ...

  6. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

  7. SpringBoot整合邮件发送

    本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的SpringBoot学习步骤,提升工程化编码能力和思维能力,写出高质量代码.希望大家都能够从中有所收 ...

  8. SpringBoot整合MQ消息队列

    SpringBoot整合MQ 借鉴的文章 1.什么是MQ 2.消息队列可以做什么 3.下载安装MQ 4.SpringBoot整合MQ的步骤 借鉴的文章 https://www.jianshu.com/ ...

  9. SpringBoot整合定时任务和Emil发送

    SpringBoot整合定时任务和Emil发送 定时任务 ​ 任务系统指的是定时任务.定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统 ...

  10. SpringBoot2 整合Ehcache组件,轻量级缓存管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Ehcache缓存简介 1.基础简介 EhCache是一个纯Java的进程内缓存框架,具有快速.上手简单等特点,是Hibernate中默认 ...

最新文章

  1. jquery获取元素在文档中的位置信息以及滚动条位置(转)
  2. 电脑版java运行条件,Java Runtime Environment电脑版-Java Runtime Environment(Java运行环境)8.0.221 x64正式版-蜻蜓手游网...
  3. python操作系统-PYTHON-操作系统基础
  4. 不可多得的Javascript(AJAX)开发工具 - Aptana
  5. Nginx安装及配置简介
  6. html图片标签和语义化标签和音频
  7. 重新捡起flask(三)
  8. TCP/IP五层模型(五层因特网协议栈)||| OSI参考模型|||数据的封装与解封装
  9. Golang 实现求素数【 输入N,求N内素数个数 】
  10. yml不变成小叶子_关于鹤望兰,你不知道的小秘密,花农告诉你,大叶子不开花...
  11. 不丢包的 却花屏_用户观看视频业务出现花屏故障
  12. 如何让用户留在生态系统里?向苹果学习!【转载】
  13. 数据结构 关键路径的个人理解
  14. ssis使用Excel目标的坑
  15. 联想 Newifi mini Y1 Padavan固件设置5Ghz桥接
  16. steam饥荒mod编写,基础的lua语言学习笔记——第一期
  17. python画图库-matplotlib
  18. 卷积神经网络分类实战
  19. 计算机专业英语电池,电池分为哪几种?英文缩写?
  20. 侯捷C++视频笔记——C++面向对象高级编程(上)

热门文章

  1. 吴伯凡-认知方法论-知行合一-建立神经元之间的高带宽连接
  2. 无法查看MSN聊天记录 总弹出下载.xml文件的对话框
  3. 此主机当前没有管理网络冗余,该主机的vSphere HA检测信号数据存储数目为0,少于要求数目:2的原因及解决办法
  4. amd服务器虚拟化,着眼未来 AMD皓龙产品从“芯”实现虚拟化
  5. 在东京生活的中国IT程序员
  6. python对5万多行的excel进行数据统计
  7. MIUI 10 已连接 但无法访问互联网 的解决方案
  8. diy计算机组装注意事项,DIY电脑组装教程:diy装机之三大原则八项注意
  9. Tensorflow入门(一)----”搭建图像识别系统“教程整理
  10. GNSS 观测 O 文件的解读