如果有人问你 JFinal 如何集成 EhCache,把这篇文章甩给他
ccwgpt 2024-10-25 10:38 15 浏览 0 评论
废话不多说,就说一句:在 JFinal 中集成 EhCache,可以提高系统的并发访问速度。
可能有人会问 JFinal 是什么,EhCache 是什么,简单解释一下。
JFinal 是一个基于Java 语言的极速 Web 开发框架,用起来非常爽,谁用谁知道。EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干的特点,用起来非常爽,谁用谁知道。
JFinal 本身已经集成了 EhCache 这个缓存插件,但默认是没有启用的。那怎么启用呢?
请随我来。
01、在 pom.xml 中加入 EhCache 依赖
02、在 JFinalConfig 中配置 EhCachePlugin
基于 JFinal 的 Web 项目需要创建一个继承自 JFinalConfig 类的子类,该类用于对整个 Web 项目进行配置。
03、添加 ehcache.xml
在项目的 src 目录 / resources 目录下添加 ehcache.xml 文件,该文件的初始内容如下所示。
简单解释一下常用的配置项,否则大家在配置的时候容易犹豫不决。
1)maxEntriesLocalHeap:内存中最大缓存对象数
2)eternal:true 表示对象永不过期,此时会忽略 timeToIdleSeconds 和 timeToLiveSeconds 属性,默认为 false
3)timeToIdleSeconds:对象最近一次被访问后的闲置时间,如果闲置的时间超过了 timeToIdleSeconds 属性值,这个对象就会过期,EhCache 将把它从缓存中清空;即缓存被创建后,最后一次访问时间到缓存失效的时候之间的间隔,单位为秒(s)
4)timeToLiveSeconds:对象被存放到缓存中后存活时间,如果存活时间超过了 timeToLiveSeconds 属性值,这个对象就会过期,EhCache 将把它从缓存中清除;即缓存被创建后,能够存活的最长时间,单位为秒(s)
假如我们现在增加以下配置:
结合之前的默认缓存配置,再来对比介绍下,大家就完全掌握了。
1)name 为该缓存的名字,后续使用缓存的时候要用到。
2)overflowToDisk:true 表示内存中缓存的对象数目达到了 maxEntriesLocalHeap 界限后,会把溢出的对象写到硬盘缓存中。此时的对象必须实现要实现 Serializable 接口
3)diskPersistent:是否缓存虚拟机重启时的数据
再来理解一下 timeToIdleSeconds 和 timeToLiveSeconds 这两个配置项。
以上表示,一个数据被添加进缓存后,该数据能够在缓存中存活的最长时间为 600 秒()timeToLiveSeconds);在这 600 秒内,假设不止一次去缓存中取该数据,那么相邻 2 次获取数据的时间间隔如果小于 300 秒(timeToIdleSeconds),则能成功获取到数据;但如果最近一次获取到下一次获取的时间间隔超过了 300 秒,那么,将得到 null,因为此时该数据已经被移出缓存了。
04、使用 CacheKit 操作缓存
CacheKit 类是 JFinal 提供的缓存操作工具类,使用起来非常简便。
CacheKit 中有两个最重要的方法:
1)get(String cacheName, Object key),从 cache 中取数据。
2)put(String cacheName, Object key, Object value) ,将数据放入 cache 中。
参数 cacheName 与 ehcache.xml 中的 <cache name="keywordsCache" …> name 属性值对应,这个很好理解。
参数 key 是指取值用到的 key;参数 value 是被缓存的数据,这个其实也好理解。比如在上面的代码中,我们使用了 keywordsCache 这个配置项,在里面放了一个 HashMap,key 为 keywordMap,value 就是 map 这个对象。
JFinal 内部提供了很多使用 Ehcache 的工具方法,比如:
List<Keywords> keywordList = dao.findByCache("keywordsCache", "keywordList", "select * from keywords");
这段代码的作用就是,当我们要从数据库中查询 Keywords 的时候,先从 Ehcache 缓存中取,如果缓存失效的话,再从数据库中取。
我是怎么知道的呢?当然不是靠猜的,我们来看一下源码。
05、最后
当数据的查询频率很高,远大于修改的频率,就要使用缓存了,这可以在很大程度上提高系统的性能。那现在我就提一个问题了,假如现在要修改一下数据,是先更新 DB,还是先更新缓存呢?
最后,我自己是一名从事了多年开发的JAVA老程序员,辞职目前在做自己的java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的java学习干货,可以送给每一位喜欢java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:java,即可免费获取。
作者:沉默王二
来源:掘金
相关推荐
- 迈向群体智能 | 智源发布首个跨本体具身大小脑协作框架
-
允中发自凹非寺量子位|公众号QbitAI3月29日,智源研究院在2025中关村论坛“未来人工智能先锋论坛”上发布首个跨本体具身大小脑协作框架RoboOS与开源具身大脑RoboBrain,可实...
- 大模型对接微信个人号,极空间部署AstrBot机器人,万事不求百度
-
「亲爱的粉丝朋友们好啊!今天熊猫又来介绍好玩有趣的Docker项目了,喜欢的记得点个关注哦!」引言前两天熊猫发过一篇关于如何在极空间部署AstrBot并对接QQ消息平台的文章,不过其实QQ现在已经很少...
- Seata,让分布式事务不再是难题!实战分享带你领略Seata的魅力!
-
终身学习、乐于分享、共同成长!前言Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的...
- 常见分布式事务解决方案(分布式事务解决的问题)
-
1.两阶段提交(2PC)原理:分为准备阶段(协调者询问参与者是否可提交)和提交阶段(协调者根据参与者反馈决定提交或回滚)。优点:强一致性,适用于数据库层(如XA协议)。缺点:同步阻塞:所有参与者阻塞...
- 分布式事务:从崩溃到高可用,程序员必须掌握的实战方案!
-
“支付成功,但订单状态未更新!”、“库存扣减后,交易却回滚了!”——如果你在分布式系统中踩过这些“天坑”,这篇文章就是你的救命稻草!本文将手把手拆解分布式事务的核心痛点和6大主流解决方案,用代码实战+...
- 谈谈对分布式事务的一点理解和解决方案
-
分布式事务首先,做系统拆分的时候几乎都会遇到分布式事务的问题,一个仿真的案例如下:项目初期,由于用户体量不大,订单模块和钱包模块共库共应用(大war包时代),模块调用可以简化为本地事务操作,这样做只要...
- 一篇教你通过Seata解决分布式事务问题
-
1 Seata介绍Seata是由阿里中间件团队发起的开源分布式事务框架项目,依赖支持本地ACID事务的关系型数据库,可以高效并且对业务0侵入的方式解决微服务场景下面临的分布式事务问题,目前提供AT...
- Seata分布式事务详解(原理流程及4种模式)
-
Seata分布式事务是SpringCloudAlibaba的核心组件,也是构建分布式的基石,下面我就全面来详解Seata@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合...
- 分布式事务最终一致性解决方案有哪些?MQ、TCC、saga如何实现?
-
JTA方案适用于单体架构多数据源时实现分布式事务,但对于微服务间的分布式事务就无能为力了,我们需要使用其他的方案实现分布式事务。1、本地消息表本地消息表的核心思想是将分布式事务拆分成本地事务进行处理...
- 彻底掌握分布式事务2PC、3PC模型(分布式事务视频教程)
-
原文:https://mp.weixin.qq.com/s/_zhntxv07GEz9ktAKuj70Q作者:马龙台工作中使用最多的是本地事务,但是在对单一项目拆分为SOA、微服务之后,就会牵扯出分...
- Seata分布式事务框架关于Annotation的SAGA模式分析
-
SAGAAnnotation是ApacheSeata版本2.3.0中引入的功能,它提供了一种使用Java注解而不是传统的JSON配置或编程API来实现SAGA事务模式的声明...
- 分布式事务,原理简单,写起来全是坑
-
今天我们就一起来看下另一种模式,XA模式!其实我觉得seata中的四种不同的分布式事务模式,学完AT、TCC以及XA就够了,Saga不好玩,而且长事务本身就有很多问题,也不推荐使用。S...
- 内存空间节约利器redis的bitmap(位图)应用场景有哪些你知道吗
-
在前面我们分享过一次Redis常用数据结构和使用场景,文章对Redis基本使用做了一个简单的API说明,但是对于其中String类型中的bitmap(位图)我们需要重点说明一下,因为他的作用真的不容忽...
- 分布式事务原理详解(图文全面总结)
-
分布式事务是非常核心的分布式系统,也是大厂经常考察对象,下面我就重点详解分布式事务及原理实现@mikechen本文作者:陈睿|mikechen文章来源:mikechen.cc分布式事务分布式事务指的是...
- 大家平时天天说的分布式系统到底是什么东西?
-
目录从单块系统说起团队越来越大,业务越来越复杂分布式出现:庞大系统分而治之分布式系统所带来的技术问题一句话总结:什么是分布式系统设计和开发经验补充说明:中间件系统及大数据系统前言现在有很多Java技术...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (52)
- java框架spring (43)
- grpc框架 (55)
- orm框架有哪些 (43)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)