JFinal2.2EhCachePlugin 篇(十)

1、关于EhCachePlugin

上一小节,我们已经学会如何简单的使用缓存。其实jfinal框架为我们提供了更加便捷的缓存神器,就是今天我们要一起学习使用的EhCachePlugin插件。

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

2、新手上路

想一千遍代码,不如动手敲一遍。

2.1配置 EhCachePlugin

EhCachePlugin既然是以插件形式配合jfinal框架来进行缓存处理的,那么要想在程序中使用这个EhCachePlugin,先得在配置文件中配置该插件。代码如下:

     /**
     * 配置插件
     */
    public void configPlugin(Plugins me) {
        //开启缓存配置
         me.add(new EhCachePlugin());
        
        // 配置C3p0数据库连接池插件
        C3p0Plugin C3p0Plugin = createC3p0Plugin();
        me.add(C3p0Plugin);
        
       //省略部分配置
    }
2.2 正确缓存姿势

改造我们之前的查询方法。代码如下:

     //CacheInterceptor拦截器可以帮助action进行缓存  
    @Before(CacheInterceptor.class)
     public void login(){
         //创建service对象
         LoginService loginService = new LoginService();
         //创建record对象
         Record record = new Record();
         record.set("name",  getPara("user.name"));
         record.set("pwd",  getPara("user.pwd"));
        //添加记录
         loginService.addUser(record);
         //查询用户数据并添加入容器中
         setAttr("userList", loginService.queryUsetrList());
         //渲染页面
         render("list.html");
     }
2.3至关重要的配置文件——ehcache.xml

这种使用方法使用的是actionKey作为缓存的名字,所以这边可以在配置文件中配置actionUrl。具体配置如下:

    <cache name="/sinlogin/login"
           maxEntriesLocalHeap="10000"
           maxEntriesLocalDisk="1000"
           eternal="false"
           overflowToDisk="true"
           diskSpoolBufferSizeMB="20"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           memoryStoreEvictionPolicy="LFU"
           transactionalMode="off" />

这样当请求同一个action的时候,CacheInterceptor就可以帮忙来处理缓存操作了。

2.4老司机之使用actionName+注解

使用注解来改变默认的actionName,需要修改xml配置文件,在controller中的action上添加注解。示例如下:

    <cache name="userList"
           maxEntriesLocalHeap="10000"
           maxEntriesLocalDisk="1000"
           eternal="false"
           overflowToDisk="true"
           diskSpoolBufferSizeMB="20"
           timeToIdleSeconds="300"
           timeToLiveSeconds="600"
           memoryStoreEvictionPolicy="LFU"
           transactionalMode="off" />

    @Before(CacheInterceptor.class)  //CacheInterceptor拦截器可以帮助action进行缓存  
     @CacheName("userList")   //缓存名称
     public void login(){
         //创建service对象
         LoginService loginService = new LoginService();
         //创建record对象
         Record record = new Record();
         record.set("name",  getPara("user.name"));
         record.set("pwd",  getPara("user.pwd"));
        //添加记录
         loginService.addUser(record);
         //查询用户数据并添加入容器中
         setAttr("userList", loginService.queryUsetrList());
         //渲染页面
         render("list.html");
     }
3、自定义缓存处理场景

当我们不想对action进行缓存的时候,只想针对部分数据进行缓存的时候,可以使用一种更加高效的操作工具CacheKit CacheKit是缓存工具操作类。

   /**
    * @author yetangtang
    * @see 查询用户信息
    * @param void
    * @return Page<Record> list
    */
    public Page<Record> queryUsetrList(){
        /**
        
        //使用Db中的paginate(分页)方法。同model操作一样
        //查询user id>2的用户信息,展现形式是每页4条数据,当前页为1
        Page<Record> list = CacheKit.get("User","UserList");
        
         //判断数据是否存在于缓存中
        if(list==null){
             //不存在,就重新执行查询一次
             list = Db.paginate(1, 4, "select * ","from user where id > ? ",2);
              //将数据存储在缓存中,第一参数是cacheName,第二个是KeyName,第三个是要保存的数据信息   ;       
             CacheKit.put("User", "UserList", list);
        }
        
        //不使用插件的缓存方式
        //Page<Record> list = Db.paginateByCache("userInfo", "userList", 1, 4, "select * ","from user where id > ? ",2);
        
        //普通的查询方式
        //Page<Record> list = Db.paginate(1, 4, "select * ","from user where id > ? ",2);

        //返回查询结果
        return list;
    }
    
4、清理缓存

清理缓存就比较简单了,使用注解分分钟解决问题。EvictInterceptor 可以根据 CacheName 注解自动清除缓存。

     @Before(EvictInterceptor.class)   //根据CacheName清理缓存信息
    @CacheName("userList")
     public void login(){
     //省略主体代码
}

PS:关于缓存这一块其实还是比较简单的,简单的梳理了一遍之后,小伙伴们最好能边动手,边读源码来学习。祝大家学有所成,加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值