Ehcache轻量级缓存框架

2024-01-09

Ehcache 是一个用于Java应用程序的开源的轻量级缓存框架。它专注于提供简单且高效的缓存解决方案,通过将数据存储在内存中,以提高对这些数据的访问速度。

1.为什么选择Ehcache

1.1 Ehcache(内存中缓存)的优缺点

优势:

  1. 性能 :像Ehcache这样的内存中缓存速度很快,因为它将数据存储在应用程序的内存中。从内存中检索数据通常比从外部数据存储中获取数据更快。

  2. 简单性 :Ehcache易于设置和配置,特别是在与Spring Boot一起使用时。它提供了一种在无需外部服务器的情况下缓存数据的简单方法。

  3. 紧密集成 :由于在Spring中使用了 EhCacheCacheManager ,因此它与Spring框架的集成非常好。它是在Spring应用程序中进行缓存的无缝解决方案。

  4. 本地存储 :数据存储在本地,减少了网络通信的需求。

考虑因素:

  1. 有限的可扩展性 :内存中缓存受应用程序服务器上的可用内存限制。如果数据大小超出可用内存,可能会导致性能问题。

  2. 重新启动时的数据丢失 :像Ehcache这样的缓存是在内存中的,因此在重新启动应用程序时会丢失数据。

1.2 Redis(分布式缓存)的优缺点

优势:

  1. 可扩展性 :Redis是一种分布式缓存解决方案,更适合需要可扩展性的应用程序。它可以处理跨多个节点的较大数据集。

  2. 持久性 :Redis支持数据持久性。您可以配置它定期将数据保存到磁盘或使用其他持久性机制。这确保了在重新启动期间不会丢失缓存的数据。

  3. 数据类型 :Redis不仅仅是一个缓存;它还是一个数据存储。它支持各种数据结构,对于某些用例可能是有益的。

  4. 外部服务器 :Redis可以作为单独的服务器运行,允许多个应用程序共享相同的缓存。

考虑因素:

  1. 网络开销 :由于Redis是一个单独的服务器,与之交互时存在网络开销,这可能引入与内存解决方案相比的延迟。

  2. 配置和设置 :设置和配置Redis可能需要比内存解决方案更多的工作。

结论:

如果你的应用程序数据规模适中且不需要分布式缓存或持久性,Ehcache可能是一个更简单和性能更好的解决方案。如果需要分布式缓存、可扩展性和数据持久性,那么Redis可能更适合。

2.Ehcache的使用

2.1 添加依赖

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

2.2 配置Ehcache

创建一个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">
    <defaultCache maxElementsInMemory="1000"
                  overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="3600"
                  timeToLiveSeconds="3600" memoryStoreEvictionPolicy="LRU"/>
    <cache name="5s" maxElementsInMemory="100"
           overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="5" timeToLiveSeconds="5"
           memoryStoreEvictionPolicy="LRU"/>
</ehcache>
  • name:缓存名称。
  • maxElementsInMemory:缓存最大个数。
  • eternal:对象是否永久有效,一但设置了,timeout将不起作用。
  • timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
  • timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
  • overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
  • diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
  • maxElementsOnDisk:硬盘最大缓存个数。
  • diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
  • diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
  • memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
  • clearOnFlush:内存数量最大时是否清除。

2.3 创建Ehcache工具类

package com.liaowang.intelligent.common.cache;

import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;
import org.springframework.cache.CacheManager;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;

@Configuration
public class CacheUtils {
    private static CacheManager manager;


    @Resource
    public void setManager(CacheManager manager) {
        CacheUtils.manager = manager;
    }

    public static Object get(String cacheName, Object key) {
        Element e= cache(cacheName).get(key);
        if(e!=null){
            return e.getObjectValue();
        }
        return null;
    }

    public static void put(String cacheName, Object key, Object value, Integer ttl, Integer tti) {
        Element e = new Element(key, value);
        //不设置则使用xml配置
        if (ttl != null) {
            e.setTimeToLive(ttl);
        }
        if (tti != null) {
            e.setTimeToIdle(tti);
        }
        cache(cacheName).put(e);
    }


    private static Cache cache(String cacheName) {
        net.sf.ehcache.CacheManager cacheManager = ((EhCacheCacheManager) manager).getCacheManager();
        if (!cacheManager.cacheExists(cacheName)) {
            cacheManager.addCache(cacheName);
        }
        return cacheManager.getCache(cacheName);
    }

}

2.4 类中使用EhCache

2.4.1 存放cache

CacheUtils.put(cacheName, token, list, 60*60, 60*60); // 设置缓存过期时间,可以根据需要设置

2.4.2 获取cache

String cacheName = "xxx"; // 设置缓存名称
Object cachedResult = CacheUtils.get(cacheName, token);
if (cachedResult != null) {
    // 缓存命中,直接返回缓存结果
    list = (List<XXX>) cachedResult;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ehcache轻量级缓存框架 的相关文章

  • SpringBoot通过@Cacheable实现redis缓存机制

    SpringBoot通过注解实现redis缓存机制 Cacheable 查询 CachePut 修改 CacheEvict 删除 下面展示一些 内联代码片 Cacheable 查询 An highlighted block key 这边以d
  • 老话新谈之缓存一致性

    前言 缓存一致性常见的更新策略也比较多 如先更新数据库再更新缓存 先删缓存再更新数据库等等 我在理解的时候有些混乱 所以这个文章提供了一些理解上的技巧去理解缓存一致性 为什么会有缓存一致性的问题 缓存与数据库是两套中间件 存在网络抖动之类的
  • Redis持久化AOF

    目录 1 AOF简介 2 AOF持久化流程 3 AOF默认不开启 4 AOF和RDB同时开启 redis听谁的 5 AOF启动 修复 恢复 6 AOF同步频率设置 7 Rewrite压缩 7 1 是什么 7 2 重写原理 如何实现重写 8
  • Redis7之介绍(一)

    一 介绍 1 1 基本了解 Remote Dictionary Server 远程字典服务 是完全开源的 使用ANSIC语言编写遵守BSD协议 是一个高性能的Key Value数据库提供了丰富的数据结构 例如String Hash List
  • Redis-Sentinel(哨兵模式),看这篇就够了哦

    文章目录 简介 启动并初始化Sentinel 初始化Sentinel服务器 替换普通Redis代码为Sentinel的专用代码 初始化 Sentinel 状态 初始化Sentinel监视的主服务器列表 创建连向主服务器的网络连接 获取主服务
  • 如何保持缓存和数据库中的数据一致

    背景 缓存是软件开发中一个非常有用的概念 数据库缓存更是在项目中必然会遇到的场景 而缓存一致性的保证 更是在面试中被反复问到 这里进行一下总结 针对不同的要求 选择恰到好处的一致性方案 缓存是什么 存储的速度是有区别的 缓存就是把低速存储的
  • 应用级缓存

    缓存介绍 缓存 让数据更接近使用者 目的是让访问速度更快 工作机制是先从缓存中读取数据 如果没有 再从慢速设备上读取实际数据并同步到时缓存 缓存命中率 缓存回收策略 JAVA缓存类型 堆缓存 堆外缓存 磁盘缓存 分布式缓存 多级缓存
  • java与redis连接过程中遇到问题

    java与redis连接过程中遇到问题 文章目录 java与redis连接过程中遇到问题 前言 一 redis是什么 特征 二 命令 1 redis通用命令 String类型常见命令 Hash常用命令 List常见命令 Set常见命令 三
  • redis精选面试题2022(持续更新)

    目录 一 redis是单线程还是多线程 二 Redis 为什么用单线程 三 redis是单线程为什么还这么快 1 内存数据库 2 简单的数据结构 3 单线程 4 IO多路复用 四 redis是如何使用跳表来存储的 五 redis没有设置过期
  • Redis热点数据处理

    1 概念 热点数据就是访问量特别大的数据 2 热点数据引起的问题 流量集中 达到物理网卡上限 请求过多 缓存分片服务被打垮 redis作为一个单线程的结构 所有的请求到来后都会去排队 当请求量远大于自身处理能力时 后面的请求会陷入等待 超时
  • 4、动态代理的缓存机制

    1 背景 上一节大致介绍了Proxy动态代理的原理 从几个疑问上面分析 这一节介绍一下动态代理的缓存机制 网上的资源比较少 可以怀着下面几个问题阅读源码 为什么要缓存 缓存的内容是什么 哪里调用的缓存 缓存的实现机制 缓存的过期机制 2 属
  • Redis高级

    目录 redis介绍安装 介绍 安装 通用命令 五大数据类型 字符串 哈希 列表 集合 有序集合 高级用法 慢查询 pipline与事务 发布订阅 Bitmap HyperLogLog GEO地理位置信息 持久化 RDB方法 AOF方案 r
  • Redis 分布式缓存

    分布式缓存 单点 Redis 的问题及解决 数据丢失 实现Redis数据持久化 并发能力 搭建主从集群 实现读写分离 存储能力 搭建分片集群 利用插槽机制实现动态扩容 故障恢复能力 利用哨兵机制 实现健康检测和自动恢复 RDB RDB全称R
  • Redis数据类型

    文章目录 Redis介绍 RedisObject的结构 1 type 2 enconding 3 lru 4 refcount 5 prt Redis源码结构
  • 工作几年了,你真的懂 Redis 嘛?

    大家好 我是伍六七 一个专注于输出 AI 编程内容的在职大厂资深程序员 全国最大 AI 付费社群破局初创合伙人 关注我一起破除 35 诅咒 Redis 基本上是大部分技术公司都会使用的缓存框架 但是我发现很多程序员其实并不懂 Redis 今
  • Redis——Redis常用命令

    Redis提供了丰富的命令 可以对数据库和各种数据类型进行操作 这些命令可以在Windows和Linux中使用 1 键值相关命令 1 1 KEYS KEYS用于返回满足pattern的所有key pattern支持以下通配符 匹配任意字符
  • Redis生产环境最佳实践

    欢迎关注公众号 通过文章导读关注 11来了 及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 和 编程高频电子书 文章导读地址 点击查看文
  • Redis生产环境最佳实践

    欢迎关注公众号 通过文章导读关注 11来了 及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 和 编程高频电子书 文章导读地址 点击查看文
  • 淘宝商品类目接口API:获取淘宝商品分类类目信息

    cat get 获得淘宝分类详情 响应参数 名称 类型 必须 示例值 描述 info Mix 0 cid 16 parent cid 0 name 其他女装 is parent true status normal sort order 0
  • Ehcache轻量级缓存框架

    Ehcache 是一个用于Java应用程序的开源的轻量级缓存框架 它专注于提供简单且高效的缓存解决方案 通过将数据存储在内存中 以提高对这些数据的访问速度 1 为什么选择Ehcache 1 1 Ehcache 内存中缓存 的优缺点 优势 性

随机推荐

  • 24分+的医药顶刊带你学习表观组学解析超级热点“肿瘤耐药”的机制

    对癌症患者采用治疗干预时获得性耐药是转移性癌症复发的主要原因 此前 获得性耐药发展的研究主要集中在识别耐药肿瘤中常见的基因突变 越来越多的证据表明 在永久性获得性耐药出现之前 癌症中存在一种表观遗传调控的可逆耐药状态 这种可逆状态可能会导致
  • 2024几个测试接口的好工具,效率加倍~

    作为一名后端程序员 一定要对自己写的接口负责 保证接口的正确和稳定性 因此 接口测试也是后端开发中的关键环节 但我相信 很多朋友是懒得测试接口的 觉得这很麻烦 一般自己写的接口自己都不调用 而是直接甩给前端或者其他调用方去验证 出了问题再改
  • 测试市场已经饱和了吗?现在转行软件测试会不会太迟?

    非常有意思的话题 某种程度上来说 测试职场一条从未设想过的道路真的走通了 这条路指广大测试呼吁对测试从业进行学历保护 专业保护 就像医学那样设置护城河 以一种令人意想不到的方式完成了 得益于大量培训机构为了赚钱 盲目的向大量非计算机相关专业
  • 一篇文章让你搞懂性能测试6大类型及其关系!

    性能测试是软件测试过程的一个关键环节 用于确定和验证应用程序或系统在各种操作条件下的性能特征 目标是确保软件在高负载 高压力 长时间运行以及其他非标准情况下仍能保持预期的行为和效率 一 性能测试的主要类型 1 基线测试 Baseline T
  • h5 唤醒小程序

    weixin dl business appid appid path pages index index
  • 盘点第三方支付行业中一些“专用术语”

    每个行业都有自己的行业术语 在官方场合被称为 术语 如果你是支付行业的新手 或者正在努力深入了解这个复杂但充满机遇的领域 那么掌握行业术语就是打开这扇门的关键 支付系统的需求文档和技术方案文档都充斥着专业词汇和行业术语 有些词汇容易理解 有
  • 【C语言】数组

    一维数组的创建和初始化 数组是一组相同类型元素的集合 数组的创建 数组的创建方式 type t arr name const n type t 是指数组的元素类型 const n 是一个常量表达式 用来指定数组的大小 数组创建的实例 数组创
  • 电商数据接口API深度解析

    随着电子商务的快速发展 电商平台之间的竞争也日益激烈 为了在市场中保持领先地位 电商平台需要不断地优化用户体验 提供个性化的服务和精准的推荐 而这一切都离不开数据 电商数据接口API作为一种高效 便捷的数据交互方式 被广泛应用于电商领域 本
  • 跨境电商三大趋势已经涌现

    在过去的几年里 跨境电商在推动外贸增长中发挥了至关重要的作用 成为了引领行业发展的强大引擎 然而 随着2024年的到来 跨境电商行业又站在了崭新的起点 准备攀登新的发展高峰 数据显示 得益于经济的逐步复苏 未来三年跨境电商行业预计将以16
  • 如何快速搭建一个自营商城?(调用电商API实现快速采集商品)

    一 背景介绍 在数字化时代 电商行业蓬勃发展 无数商家涌入这片蓝海 对于许多有志于开拓电商业务的企业和个人来说 快速搭建一个自营商城成为了迫切的需求 然而 传统意义上的自建商城需要投入大量的人力 物力和时间 这让许多初创企业和个人望而却步
  • 思腾合力赞助CCF YOCSEF太原第十一届学术委员会第三次全体会议

    2024年1月6日 由思腾合力赞助的 CCF YOCSEF太原第十一届学术委员会第三次全体会议暨AC换届选举活动 在山西大学举办 华北区教育行业负责人宋肖敏出席本次会议 会议汇聚了众多学术界和企业界的精英 共同探讨人工智能和计算机科学的未来
  • 在ASP.NET MVC中使用JQuery提供的弹出窗口(模态窗口)

    在ASP NET MVC中使用JQuery提供的弹出窗口 模态窗口 原理 使用 div 图层灵活显示在浏览器的任何位置 默认情况下指定 div 不可见 引用 样式表 在JQuery的官方网站可以下载对应的css样式表 打开官网的 样例页 找
  • KALI Linux 最新超详细安装教程

    自己也在学习所以就想着记录一下 接下来开始安装 一 先下载好kali linux 的镜像 可以去kali的官网 https www kali org get kali kali bare metal 还可以去 清华大学开源软件镜像站下载 h
  • vue2中Cascader 级联选择器限制选择个数和回显问题

    文章目录 1 组件默认数据绑定 2 指定数据绑定 3 watch监听v model绑定的数组 控制选中个数 4 前后端数据转换 实现回显 1 接口初始数据回显 2 重新选择级联选择器后 如何将选择的数据转换成后端需要的数据 3 最后提交数据
  • 【网络安全】XSS如何绕过HttpOnly获取Cookie以及XSS与CORS漏洞利用

    目录 HttpOnly XSS如何绕过HttpOnly获取Cookie 直接读取 目录 HttpOnly 当开启HttpOnly时不依靠cookie如何登录后台 直接读取 表单劫持 XSS如何绕过HttpOnly获取Cookie 利用php
  • Python-PyQt5树莓派上位机

    Python PyQt5树莓派上位机 一个使用PythonQT设计的树莓派的上位机 功能大概如下 1 笔记本电脑与树莓派的通讯是否成功显示 给个信号显示判断是否通讯成功 2 阈值的设置显示 3 图像成像的显示 4 是否发生火灾报警显示 5
  • vue2项目实现excel文件导入导出和拖拽上传

    文章目录 一 excle文件导出 二 excel文件导入 三 文件拖拽上传 四 完整代码 文件导入导出实现逻辑图 一 excle文件导出 导出员工接口返回的是二进制流 axios配置responseType为blob接收二进制流文件为Blo
  • 拍照翻译在线使用的具体教程在哪里?你一定想知道这个

    马上就期末了 这几天真是天天在为我的日语考试而发愁 都怪我平时上课只顾着 欣赏 老师放的各种教学电影 那些课堂知识倒是一点也不进脑 这下好了 人家已经在美美的复习 我还卡在看不懂单词 尴尬期 而且这查词也太费功夫了吧 一下午的时间光用在这上
  • 手机系统更新的背后,涉及技术、商业与安全的考量

    在数字化时代 手机已经成为我们生活中不可或缺的伙伴 而系统更新则是手机使用中不可避免的一部分 然而 为何手机需要经常进行系统更新呢 这背后涉及多方面的考量 首先 从技术角度来看 手机系统更新的根本原因是科技的持续进步 随着技术的飞速发展 手
  • Ehcache轻量级缓存框架

    Ehcache 是一个用于Java应用程序的开源的轻量级缓存框架 它专注于提供简单且高效的缓存解决方案 通过将数据存储在内存中 以提高对这些数据的访问速度 1 为什么选择Ehcache 1 1 Ehcache 内存中缓存 的优缺点 优势 性