ibatis中使用缓存

一 什么是缓存以及为什么要使用缓存

从数据库读出数据后,该数据在某个缓冲区暂时被保存起来。当我们再次需要读取该数据的时候,直接从该缓冲区中读取,而不用再次访问数据库。我们知道数据库连接是很昂贵的资源,减少对数据库的访问是提高性能的手段之一。

 

 

二 Ibatis中使用缓存的配置方法


①SqlMapConfig.xml

<sqlMapConfig>
 <settings cacheModelsEnabled="true" />
 ......
</sqlMapConfig>

②StudentMapper.xml

<sqlMap namespace="student">
 <typeAlias alias="student" type="cn.xy.Student" />

 <!-- 配置缓存模型 -->
 <cacheModel id="stu-cache" type="OSCache" readOnly="true"
  serialize="true">
  <flushInterval hours="24" />
  <flushOnExecute statement="insertStu" />
  <flushOnExecute statement="updateStu" />
  <flushOnExecute statement="deleteStu" />
  <property value="500" name="size" />
 </cacheModel>

 <resultMap id="StudentMap" class="student">
  <result property="id" column="ID" />
  <result property="name" column="NAME" />
 </resultMap>

 <select id="selectAllUser" resultMap="StudentMap" cacheModel="stu-cache">
  select * from student
 </select>

 <insert id="insertStu" parameterClass="student">
  insert into student(Id,name) VALUES (#id#, #name#)
 </insert>
 .......
</sqlMap>

③ java代码使用ibatis就不赘述了

 

 

三 缓存标签详解

 

1 id 一个标识,在下面的select语句中将引用该标识。

 

2 Type cacheModel的实现类型,目前有如下4种实现:

①MEMORY(com.ibatis.sqlmap.engine.cache.memory.MemoryCacheController)
MEMORY cache实现使用java的软引用类型来管理cache的行为,使用一个HashMap来保存当前需要缓存的数据对象的引用,当内存不足时java虚拟机将回收这些引用,从而清除cache。

②LRU(com.ibatis.sqlmap.engine.cache.lru.LruCacheController)
LRU Cache 实现用“近期最少使用”原则来确定如何从Cache中清除对象,当Cache溢出时,最近最少使用的对象将被从Cache中清除。

③FIFO(com.ibatis.sqlmap.engine.cache.fifo.FifoCacheController)
FIFO Cache实现用先进先出原则来确定如何从 Cache 中清除对象。即最先进入Cache的对象将从Cache中清除。

④OSCACHE(com.ibatis.sqlmap.engine.cache.oscache.OSCacheController)
OSCACHE Cache实现是OSCache2.0缓存引擎的一个Plugin,它具有高度的可配置性,分布式,高度的灵活性(很推荐使用该类型)OSCache可以通过oscache.properties文件进行缓存的相关配置。

3 readOnly readOnly的值表示缓存中的数据对象是否只读。若为true,则当数据对象发生变化时,数据对象就将被从缓存中废除,下次需要重新从数据库读取数据,构造新的数据对象。而若为false,则意味着缓存中的数据对象可更新,不必从数据库中读取。

4 serialize 如果需要全局的数据缓存,CacheModel的serialize属性必须被设为true。否则数据缓存只对当前Session有效,局部缓存对系统的整体性能提升有限。在serialize="true"的情况下,如果有多个Session同时从Cache 中读取某个数据对象,Cache将为每个Session返回一个对象的复本,也就是说,每个Session将得到包含相同信息的不同对象实例。因而Session可以对其从Cache获得的数据进行存取而无需担心多线程并发情况下的同步冲突。

 
5 <flushInterval hours="24">
指定多长时间清除缓存,例如指定每24小时强行清空缓存区的所有内容。

6 <flushOnExecute statement="insertStu"/>在执行指定的语句时将刷新数据库。

7 Size
指定Cache的最大容量。

 

 

原帖地址:http://hnylj.iteye.com/blog/363066

 

 

时间: 2024-12-03 02:35:57

ibatis中使用缓存的相关文章

ibatis中,用什么方式查询分页效率高?

问题描述 ibatis中,用什么方式查询分页效率高? 我的数据量比较大. 解决方案 ibatis 又不是数据库,它又不知道如何分页..他只是一个sql builder比如mysql里面的分页是用limit offset来做的,你就用ibatis写一个limit offset好了其它类型的数据库以此类推.与其说分页的效率,不如说是你sql语句查询的效率如何,最简单看有查询有没有用到索引,在mysql里面用explain select xxxx from xxx where解决方案二:三层嵌套是or

详解Java的MyBatis框架中的缓存与缓存的使用改进_java

一级缓存与二级缓存MyBatis将数据缓存设计成两级结构,分为一级缓存.二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存.一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认情况下自动支持的缓存,用户没有定制它的权利(不过这也不是绝对的,可以通过开发插件对它进行修改): 二级缓存是Application应用级别的缓存,它的是生命周期很长,跟Application的声明周期一样,也就是说它的作用范围是整个Appl

在J2EE 1.3中消除服务定位器实现中的缓存

引言 Service Locator 是 Java 2 Enterprise Edition (J2EE) 应用程序中一个比 较流行的应用程序设计模式.这个模式通过目录服务封装访问组件的代码,如 JNDI 客户 端代码之类,因此客户端可以简单的以资源名通过验证并返回这个资源.服务定位器实现 通常包括资源缓存,以此来避免对相同资源的重复查找.然而这只能在 J2EE 1.2 中正常 工作,但在 J2EE 1.3 和以后的版本中,缓存可以在应用程序部署中引入微妙且难以诊断 的错误.因此,在 J2EE

cpu中一级缓存是什么

  一级缓存都内置在CPU内部并与CPU同速运行,可以有效的提高CPU的运行效率.一级缓存越大,CPU的运行效率越高,但受到CPU内部结构的限制,一级缓存的容量都很小. CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多.缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存.在缓存中的数据是内存中的一小部分,但这一小

网页中的缓存视频怎么下载

  小编这里要跟大家分享的是关于网页中的缓存视频的下载方法,看视频是大部分用户在工作之余的消遣方式,很多时候我们点击视频进行播放时系统往往会将其缓存,那么我们之后该如何找到这些缓存的视频文件呢,其实方法很简单,下面跟小编一起来学习一下吧! 操作方法/步骤: 1.首先点击"工具"下拉菜单 选择"Internet"选项,切换到常规选项卡; 2.然后点击删除按钮,去掉图中两个选项框来删除这些文件,以帮助我们更好的寻找视频,点击删除,即可删除这些垃圾文件; 3.点击设置,将

清除电脑中DNS缓存的办法

  其实电脑在每次访问一个域名之后,就会自动的解析条目,然后将DNS的缓存文件保存在电脑之中,虽然这样的操作让我们以后访问域名时变得稍微快了一点,但是这样的操作也会造成电脑中垃圾问价你的越来越多,直到最后,电脑变得非常的卡,那么清除电脑中DNS缓存的办法是什么呢? 首先,我们按下win+r的组合键,然后输入cmd,打开电脑的运行窗口. 在运行窗口中,我们输入ipconfig/flushdns命令,这是清除电脑中DNS缓存的命令. 待电脑运行完毕之后,我们就会看到成功刷新DNS解析缓存的字样.这也

php smarty模版引擎中的缓存应用_php技巧

1,Smarty缓存的配置: 复制代码 代码如下: $smarty->cache-dir="目录名"; //创建缓存目录名 $smarty->caching=true; //开启缓存,为false的时候缓存无效 $smarty->cache_lifetime=60; //缓存时间,单位是秒 2,Smarty缓存的使用与清除 复制代码 代码如下: $marty->display("cache.tpl",cache_id); //创建带ID的缓存

OEA中的缓存模块设计

  项目组目前开发的基于OEA框架的GIX4项目,本次功能已经完成得差不多了,本次迭代的目标主要是提升产品的性能.由于GIX4是C/S结构的应用程序,所以决定实现缓存模块来提升高繁数据访问的缓存.     本篇文章主要介绍了OEA框架中的缓存模块设计与一般的缓存有什么不同,如何在OEA框架中实现缓存模块.分为以下几个小节: 一般缓存介绍 OEA缓存目标 概要设计 通用缓存框架的详细设计 OEA中集成Cache的详细设计 小结 一般缓存介绍     网上介绍缓存的文章比较多,在这里我就挑点重点说一

haloop-Haloop迭代模型,可以查看迭代过程中的缓存信息嘛

问题描述 Haloop迭代模型,可以查看迭代过程中的缓存信息嘛 在Haloop迭代模型中,Map input.Reduce input.Reduce output缓存可以查看嘛,怎么查看