2019独角兽企业重金招聘Python工程师标准>>>

1.配置插件

public class DemoConfig extends JFinalConfig {public void configPlugin(Plugins me) {me.add(new EhCachePlugin());}
}

如果要配置自己的配置文件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="D:/cache"/><defaultCachemaxElementsInMemory="1000"eternal="false"timeToIdleSeconds="10"timeToLiveSeconds="10"overflowToDisk="false"/><cache name="newslist"eternal="false"timeToIdleSeconds="360"timeToLiveSeconds="3600"maxElementsInMemory="1"overflowToDisk="true"diskPersistent="true"memoryStoreEvictionPolicy="LRU" ></cache>
</ehcache>
public class DemoConfig extends JFinalConfig {public void configPlugin(Plugins me) {me.add(new EhCachePlugin(DemoConfig.class.getClassLoader().getResource("ehcache.xml").getFile()));}
}

接下来介绍配置文件ehcache.xml中的参数信息

diskStore path= 缓存文件的存储路径

user.home -用户的根目录

user.dir – 用户的当前工作目录

java.io.tmpdir – 默认临时文件路径

也可以直接填写你自己想要设置的路径比如D:/cache  (不需要自己创建文件夹)

<defaultCache>元素:设定缓存的默认数据过期策略。

<cache>元素:设定具体的命名缓存的数据过期策略。

 这两个元素中的参数

        name - 缓冲名称。通常为缓存对象的类名;

maxElementsInMemory:设置基于内存的缓存可存放对象的最大数目;

 maxElementOnDisk:设置基于硬盘的缓存可存放对象的最大数目;

eternal:如果为true,表示对象永远不会过期,此时会忽略tiemToldleSeconds和

timeToLiveSeconds属性,默认为false。

 timeToldleSeconds:设置允许对象处于空间状态的最长时间,以秒为单位。当对象自动最近一次被访问后,如果处于空闲状态的时间超过了timeToldleSeconds属性值,这个对象就会过期。当对象过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性的值为0,那么就表示该对象可以无限期地存于缓存中。

 timeToLiveSeconds:必须大于timeToldleSeconds属性,才有意义;

overflowToDisk:如果为true,表示当基于内存的缓存中的对象数目达到了maxElementsInMemory界限后,会把溢出的对象写到基于硬盘的缓存中。注意,如果缓存的对象要写入到硬盘中的话,则该对象必须时间了Serializable接口才行(也就是序列化);

memoryStoreEvictionPolicy:缓存对象清除策略。有三种:

1. FIFO,first in first out,先进先出。

2. LFU,Less Frequently Used,一直以来最少被使用策略,缓存元素有一个hit属性,hit值最小的将会被清除出缓存。

3. LRU:least Recenly used,最近最少被使用,缓存的元素有一个时间戳,当缓存的容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

以下是个人的理解diskPersistent : 如果为true,则每次缓存都会写入到硬盘中去,而且服务正常关闭就会生成与之.index文件,这样你下次启动服务就能获取到之前的缓存.这个设置为true后,overflowtodisk就失效了,因为每次都会写入到硬盘中去.

如果使用了中断进程的方式来关闭服务,就会不生成.index文件,你可以用

CacheKit.getCacheManager().shutdown();

来正常关闭并生成.index文件

overflowToDisk在使用这个参数的时候和上面的解释出现了不一样的结果,overflowtodisk为true,改变参数maxElementsInMemory的值,发现本地硬盘缓存的.data文件大小不变,说明此参数为true时,会将缓存数据全部写入到硬盘上去;为false时,硬盘上就不存在.data文件.  diskPersistent默认为false,没有设置为true,在关闭服务时,会清除硬盘上的缓存数据.

注解CacheInterceptor

@Before(CacheInterceptor.class)
@CacheName("newslist")
public void list(){List<Record> bloglist = Db.use("mysql").find("select * from blog");Record account = Db.use("mysql").findById("account",2);setAttr("bloglist", bloglist);setAttr("account", account);render("/html/show.html");
}

如果没有使用注解CacheName,默认actionkey为CacheName,在配置文件中找不到对应的Cache,就会默认缓存到defaultCache中去,因为我在ehcache.xml中配置了name为newslist的cache元素,而且diskPersistent:true,本地会生成newslist.data.如果你想用工具类CacheKit去获取,所需的key是actionkey,比如/user/list

CacheKit.get("newslist","/user/list")

工具类CacheKit

public void list() {
List<Blog> blogList = CacheKit.get("blog", "blogList");
if (blogList == null) {
blogList = Blog.dao.find("select * from blog");
CacheKit.put("blog", "blogList", blogList);
}
setAttr("blogList", blogList);
render("blog.html");
}
public void list() {
List<Blog> blogList = CacheKit.get("blog", "blogList", new
IDataLoader(){
public Object load() {
return Blog.dao.find("select * from blog");
}});
setAttr("blogList", blogList);
render("blog.html");
}

注解EvictInterceptor

@Before(EvictInterceptor.class)
@CacheName("newslist")
public void clearCache(){renderNull();
}

清除cachename为newslist里的缓存数据

缓存查询

http://www.tuicool.com/articles/fqARre

转载于:https://my.oschina.net/zhuqianli/blog/825775

JFinal EhCachePlugin的学习笔记相关推荐

  1. jfinal框架教程-学习笔记(一)

    JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所有优势 ...

  2. JFinal常量配置学习笔记

    在继承 JFinalConfig 类时,需要 实现 /** * Config constant */ public abstract void configConstant(Constants me) ...

  3. 《Java工程师修炼之道》学习笔记

    生活加油,摘一句子, 如果有一天你不再寻找爱情,只是去爱:你不再渴望成功,只是去做:你不再追逐成长,只是去修:一切才真正开始--纪伯伦                                 ...

  4. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  5. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  6. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  8. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  9. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  10. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

最新文章

  1. 接口测试和单元测试的区别
  2. python 调用linux命令-Python 执行Linux系统命令的N种方法
  3. ------------------字节流---------------------
  4. RUNOOB python 67 数组的元素互换
  5. 华为数据之道 pdf_华为官方出品,华为数据之道新书来了
  6. sql server 记录删除数据ip_玻璃做介质,用光记录或删除数据,全息云存储来了!...
  7. Log4j按级别输出日志到不同的文件
  8. Mac系统的环境变量配置
  9. 成都Uber优步司机奖励政策(2月22日)
  10. 认知系列4: 《认知突围》笔记
  11. swift锁屏播放,音乐进度更新,专辑,歌手名显示
  12. radius pap 加/解密算法实现-golang
  13. Linux命令 ls
  14. 罚函数 c语言,神题求解............
  15. mysql数据库relay_MySQL 数据库主从复制小知识
  16. 腾讯游戏云以科技连接游戏未来,全力打造行业新生态
  17. 区块链需要学习哪些东西_2020年学区块链需要什么基础?(非常详细)
  18. 【Linux】Ubuntu云服务器配置MySQL
  19. android饿了么购物车,Android仿饿了么加入购物车旋转控件自带闪转腾挪动画的按钮效果(实例详解)...
  20. python编写万年日历解析_python生成日历实例解析

热门文章

  1. 17年,寻找出路的一年
  2. pythotn基础篇——条件分支与循环--3
  3. php使用框架优缺点,PHP四大主流框架的优缺点总结(上)
  4. 2017年c语言试卷及答案,2017年全国计算机c语言试题及答案
  5. php数组合成函数,PHP合并数组函数array_merge用法分析
  6. kali升级软件_KALI更新软件源地址
  7. labview 一个tdms文件 两个线程同时往里写_LabVIEW 状态图(Statechart)介绍
  8. Python文件中,reload(sys)找不到的问题
  9. Java JDK 配置环境变量
  10. DAHON 美国大行