当前位置: 首页 > 图文教程 > Java技术 > 数据库持久层 > 数据库持久层:iBATIS框架中Serializable可读写缓存及存储类型

数据库持久层
持久层设计和数据库设计的原则
关于php的数据库持久层设计
在 SCA Module 中使用 Hibernate 框架实现数据持久层
流行持久层框架对数据库操作
Hibernate持久层操作
hibernate 的 log4j.properties 配置文件
Hibernate的映射类型 hibernate mysql映射类型
hibernate的findByExample
持久化对象PO
终于用hibernate把数据持久层写完了 小结下遇到的一些问题
理解PO类在数据层和VO类在逻辑层的区别
hibernate中使用session之一
hibernate映射到mysql数据库时应该注意的几点
在Struts和Hibernate之间搭起桥梁
Hibernate技术文章-基本配置和写法
Hibernate技术
Hibernate详解
Java数据库编程中的技巧
Hibernate 实体关联关系映射----总结
Hibernate中二级缓存的配置和使用

数据库持久层:iBATIS框架中Serializable可读写缓存及存储类型


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 190 ::
收藏到网摘: n/a

正如您所知道的,只对当前Session有效的缓存对整体应用性能的提高作用有限。Serializable可读写缓存可以提高整体应用(而不仅仅是每个Session)的性能。这种缓存为每一个Session返回缓存对象不同的实例(复本)。因此每一个Session都可以安全修改返回的对象。不同之处在于,通常您希望从缓存中得到同一个对象,但这种情况下得到的是不同的对象。还有,每一个缓冲在Serializable缓存的对象都必须是Serializable的。这意味着不能同时使用Serializable缓存和延迟加载,因为延迟加载代理不是Serializable的。想知道如何把Serializable缓存,延迟加载和联合查询结合起来使用,最好的方法是尝试。要使用Serializable缓存,设置readOnly=false”和serialize=true”。缺省情况下,缓存是只读模式,不使用Serializable缓存。只读缓存不需要Serializable

 

缓存类型

Cache Model使用插件方式来支持不同的缓存算法。它的实现在cacheModel的用type属性来指定。指定的实现类必须实现CacheController接口,或是下面4个别名中的其中之一。Cache Model实现的其他配置参数通过cacheModelproperty元素来设置。目前包括以下的4个实现:

“MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController)

MEMORY cache实现使用reference类型来管理cache的行为。垃圾收集器可以根据reference类型判断是否要回收cache中的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。

MEMORY实现可以这样配置:

<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>

MEMORY cache实现只认识一个<property>元素。这个名为“reference-type”属性的值必须是STRONGSOFTWEAK三者其一。这三个值分别对应于JVM不同的内存reference类型。

下面介绍了在MEMORY实现中不同的reference 类型。要更好地理解reference类型,请参考JDK文档中的java.lang.ref,以获得更多关于“reachability”的信息。

WEAK(缺省)

大多数情况下,WEAK类型是最佳选择。如果不指定类型,缺省类型就是WEAK。它能大大提高常用查询的性能。但是对于当前不被使用的查询结果数据,将被清除以释放内存用来分配其他对象。

SOFT

在查询结果对象数据不被使用,同时需要内存分配其他对象的情况下,SOFT类型将减少内存不足的可能性。然而,这不是最具侵入性的reference类型,结果数据依然可能被清除。

STRONG

STRONG类型可以确保查询结果数据一直保留在内存中,除非Cache被刷新(例如,到了刷新的时间或执行了更新数据的操作)。对于下面的情况,这是理想的选择:1)结果内容数据很少,2)完全静态的数据,和3)频繁使用的数据。优点是对于这类查询性能非常好。缺点是,如果需要分配其他对象,内存无法释放(可能是更重要的数据对象)。

 “LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController)

LRU Cache实现用“近期最少使用”原则来确定如何从Cache中清除对象。当Cache溢出时,最近最少使用的对象将被从Cache中清除。使用这种方法,如果一个特定的对象总是被使用,它将保留在Cache中,而且被清除的可能性最小。对于在较长的期间内,某些用户经常使用某些特定对象的情况(例如,在PaginatedList和常用的查询关键字结果集中翻页),LRU Cache是一个不错的选择。

LRU Cache实现可以这样配置:

<cacheModel id="product-cache" type="LRU">

<flushInterval hours="24"/>

<flushOnExecute statement="insertProduct"/>

<flushOnExecute statement="updateProduct"/>

<flushOnExecute statement="deleteProduct"/>

<property name=”size” value=”1000” />

</cacheModel>

LRU Cache实现只认可一个property元素。其名为“cache-size”的属性值必须是整数,代表同时保存在Cache中对象的最大数目。值得注意的是,这里指的对象可以是任意的,从单一的String对象到Java BeanArrayList对象都可以。因此,不要Cache太多的对象,以免内存不足。

“FIFO” (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController)

FIFO Cache实现用“先进先出”原则来确定如何从Cache中清除对象。当Cache溢出时,最先进入Cache的对象将从Cache中清除。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO Cache是很好的选择。

FIFO Cache可以这样配置:

<cacheModel id="product-cache" type="FIFO">

<flushInterval hours="24"/>

<flushOnExecute statement="insertProduct"/>

<flushOnExecute statement="updateProduct"/>

<flushOnExecute statement="deleteProduct"/>

<property name=”size” value=”1000” />

</cacheModel>

FIFO Cache实现只认可一个property元素。其名为“cache-size”的属性值必须是整数,代表同时保存在Cache中对象的最大数目。值得注意的是,这里指的对象可以是任意的,从单一的String对象到Java BeanArrayList对象都可以。因此,不要Cache太多的对象,以免内存不足。

“OSCACHE” (com.ibatis.db.sqlmap.cache.oscache.OSCacheController)

OSCACHE Cache实现是OSCache2.0缓存引擎的一个Plugin。它具有高度的可配置性,分布式,高度的灵活性。

OSCACHE实现可以这样配置:

<cacheModel id="product-cache" type="OSCACHE">

<flushInterval hours="24"/>

<flushOnExecute statement="insertProduct"/>

<flushOnExecute statement="updateProduct"/>

<flushOnExecute statement="deleteProduct"/>

</cacheModel>

OSCACHE实现不使用property元素,而是在类路径的根路径中使用标准的oscache.properties文件进行配置。在oscache.properties文件中,您可以配置Cache的算法(和上面讨论的算法很类似),Cache的大小,持久化方法(内存,文件等)和集群方法。