收藏网站
  设为首页
用户名: 密码: 验证码: 看不清?  站内搜索:  
首  页 Java培训 企业培训 课程介绍 就业情况 人才外包 新闻与文章
新闻与文章
   
   查看文章
   查看小贴士
   查看新闻
iBATIS的数据缓存
田雪松
发布时间:2008-05-31 11:37:38    浏览次数:129       类别:开源框架
  iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开源项目。iBATIS最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。Clinton Begin在2003年加入加拿大的ThoughtWorks  公司。

  iBATIS已被Apache组织接管,官方网站为http://ibatis.apache.org。iBATIS目前的最高版本为2.3,应经常关注其版本变化,正在酝酿中的新版本是3.0。iBATIS由于对数据层的封装不是很“深”,因此很容易理解,程序员可以将SQL语句写到配置文件中,控制起来比Hibernate更容易。

  与Hibernate相同,iBATIS中也使用缓存技术。使用缓存技术能减少读写数据库的次数,从而提高性能。您现在访问的网站也使用了缓存技术。只要使用了缓存,就必须要考虑以下一些问题:

1、如何保证数据的一致性?

  缓存的数据毕竟是以前的数据,如果后台的数据已经发生了变化,而缓存中的数据如何能够感知这个变化呢?如果缓存感知到了这个变化,那么就必须要刷新,以保证与后台数据的一致性。那么,如何让缓存感知数据的变化呢?一种办法就是定期刷新数据;另一种办法是当后台数据发生变化时,主动通知缓存让其更新。

2、缓存的数据存储在何处,如果存储空间不足了应该怎么办?

  缓存的数据按理来说应该是在内存中的,如果存储在外存中,其缓存的意义似乎就不大了。但是内存毕竟是有限的,当内存满了的时候,我们应该如何呢?可能有些认为很简单,满了不缓存不就完了?但是假设现在缓存中的数据被访问的次数很少,而正要缓存却因为内存空间问题而无法访问的数据却会被经常访问。那么,如果想要提升性能就应该让经常被访问的数据缓存起来,而将缓存中不被访问的数据清空。


  下面我们来看一个iBATIS的缓存配置,然后简单说明iBATIS是如何解决上述问题的:

<cacheModel id="product-cache" type="MEMORY">
  <flushInterval hours="24"/>
  <flushOnExecute statement="insertProduct"/>
  <flushOnExecute statement="updateProduct"/>
  <flushOnExecute statement="deleteProduct"/>
  <property name=”reference-type” value=”WEAK” />
</cacheModel>

  我们分别说明:

  第一,数据一致问题。

  我们看到,cacheModel中有一个子元素flushInterval,它要说明的就是缓存要隔多长时间刷新一次缓存。另外,还有一个flushOnExecute元素,它就是用于说明当什么样的操作执行时需要刷新缓存。

  第二、缓存存储位置的问题。

  我们可以看到,cacheModel元素有一个type属性,它说明缓存的种类。上面的例子是MEMORY类型的,简单来说就是内存类型。子元素中还有一个property,它的名称是reference-type,也即引用类型,上面的例子中使用的是WEAK,也即弱引用类型。

  缓存的类型主要是用于说明当内存不足时,缓存采取的策略,下面我们将iBATIS中的缓存类型分别说明一下:

一、MEMORY类型

  这种类型是基于Java引用类型清理内存,引用类型分别可以是强引用(STRONG)、软引用(SOFT)、弱引用(WEAK),其中弱引用最常见,适于内存不充足的情况。有很多基础知识不扎实的学员到这里就糊涂了,因为他们往往并不清楚什么是强引用、软引用和弱引用。我这里简单介绍一下。
  我们通常提到Java垃圾回收时都会说,当没有引用指向一块存储空间时,这块存储空间就会被当做垃圾回收了。只要有引用指向,那么这块存储空间就永远不会被回收。但事并不完全是这样的,上面说的这种引用只是引用类型中的一种,叫强引用,而Java中还有另外三种引用类型。强引用是指只要引用指向内存空间,这块内存空间就不会被回收;软引用则不同,即使有引用指向,当内存不足时,这块空间也会被回收,以节省空间;而虚引用就更不一样了,虚引用指向的存储空间,随时都有可能被回收,就跟没有指向一样。
  限于篇幅,我这里不能再详细说明了。有时间,我会另外写一篇关于引用类型的文章,详细解释它们的用处。

二、LRU类型

  LRU是Least Recently Use的首字母简写,叫做“最近最少使用原则”。它的意思是说,当内存不足时,缓存会将那些在最近一段时间内使用次数最少的清理出内存,而让新的需要缓存的数据写到内存中来。显然,这种缓存类型是一种不错的选择。

三、FIFO类型

  FIFO是First In First Out的简写,叫做“先进先出原则”,是队列数据结构的典型特点。它的意思是说,当内存不足时,将那些在缓存中驻留时间最长的数据清理出内存。

四、OSCACHE类型

  OSCACHE是一种缓存开源框架,是OpenSynphony的作品。这里的意思就是说,其缓存要使用OSCACHE。
在线咨询
 武老师: 点击这里给我发消息
 代老师: 点击这里给我发消息
 
电话咨询
 报名热线:010-62320869
电子邮件
 Email:consult@sodii.com
资源下载
  入学测试题
  报名登记单
  Java基础视频
  Struts视频
  Hibernate视频
  Spring视频
  PLSQL视频
  Hibernate讲义
  Spring讲义
乘车路线
1、乘坐47、386、836、753、740、983、656、944、运通109、运通113等,在学院桥东下车,路北白色大楼即是科群大厦;
2、乘坐375、438、386、743、748、398、392等,到北航下车,向北步行200米至学院桥,学院桥东北角即是科群大厦;
3、西站下车,可直接乘坐47路到学院桥东;北京站下车,坐2号线地铁至东直门,换乘375在北航下车

联系电话:010-62320869│QQ:453493255│电子邮件:consult@sodii.com 地址:北京市海淀区学院路30号科群大厦214室
Copyright (C) 2007-01 All Rights Reserved 松迪科技(北京)有限公司
京ICP备  07019912号