JFinal 极速开发框架--6.EhCachePlugin

6.1 概述

     EhCachePlugin 是 JFinal 集成的缓存插件,通过使用 EhCachePlugin 可以提高系统的并发 访问速度。

 

6.2 EhCachePlugin

EhCachePlugin 是作为 JFinal 的 Plugin 而存在的,所以使用时需要在 JFinalConfig 中配置EhCachePlugin,以下是 Plugin 配置示例代码:

public class DemoConfig extends JFinalConfig {

public void configPlugin(Plugins me) {

    me.add(newEhCachePlugin());

}

}

 

6.3 CacheInterceptor

CacheInterceptor 可以将 action 所需数据全部缓存起来,下次请求到来时如果 cache 存在则 直接使用数据并 render,而不会去调用 action。此用法可使 action 完全不受 cache 相关代码所 污染,即插即用,以下是示例代码:

@Before(CacheInterceptor.class)

public void list() {

List<Blog> blogList = Blog.dao.find("select * from blog"); User user = User.dao.findById(getParaToInt()); setAttr("blogList", blogList);

setAttr("user", user); render("blog.html");

}

上例中的用法将使用 actionKey 作为 cacheName,在使用之前需要在 ehcache.xml 中配置以 actionKey 命名的 cache 如:<cache name="/blog/list" …>,注意 actionKey 作为 cacheName 配置 时斜杠”/”不能省略。此外 CacheInterceptor 还可以与 CacheName 注解配合使用,以此来取代默认的 actionKey 作为actionName,以下是示例代码:

@Before(CacheInterceptor.class)

@CacheName("blogList")

public void list() {

List<Blog> blogList = Blog.dao.find("select * from blog"); setAttr("blogList", blogList);

render("blog.html");

}

 

以上用法需要在 ehcache.xml 中配置名为 blogList 的 cache 如:<cache name="blogList" …>。

 

6.4 EvictInterceptor

EvictInterceptor 可以根据 CacheName 注解自动清除缓存。以下是示例代码:

@Before(EvictInterceptor.class)

@CacheName("blogList")

public void update() { getModel(Blog.class).update(); redirect("blog.html");

}

上例中的用法将清除 cacheName 为 blogList 的缓存数据,与其配合的 CacheInterceptor 会 自动更新 cacheName 为 blogList 的缓存数据。

 

6.5 CacheKit

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");

}

CacheKit 中最重要的两个方法是 get(String cacheName, Object key)与 put(String cacheName,Object key, Object value)。get 方法是从 cache 中取数据,put 方法是将数据放入 cache。参数 cacheName 与 ehcache.xml 中的<cache name="blog" …>name 属性值对应;参数 key 是指取值用 到的 key;参数 value 是被缓存的数据。

 

以下代码是 CacheKit 中重载的 CacheKit.get(String, String, IDataLoader)方法使用示例:

public void list() {

List<Blog> blogList = CacheKit.get("blog", "blogList", newIDataLoader(){

public Object load() {

return Blog.dao.find("select * from blog");

}});

setAttr("blogList", blogList); render("blog.html");

}

 

CacheKit.get 方法提供了一个 IDataLoader 接口,该接口中的 load()方法在缓存值不存在时 才会被调用。该方法的具体操作流程是:首先以 cacheName=blog 以及 key=blogList 为参数去 缓存取数据,如果缓存中数据存在就直接返回该数据,不存在则调用 IDataLoader.load()方法来 获取数据。

 

6.6 ehcache.xml 简介

 

EhCache 的使用需要有 ehcache.xml 配置文件支持,该配置文件中配置了很多 cache 节点, 每个 cache 节点会配置一个 name 属性,例如:<cache name="blog" …>,该属性是 CacheKit 取值所必须的。其它配置项如 eternal、 overflowToDisk、timeToIdleSeconds、 timeToLiveSeconds 详见 EhCache 官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值