`
jasonw68
  • 浏览: 153014 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

(转)ibatis 缓存 (cacheModel)详解

 
阅读更多
cacheModel的属性值等于指定的 cacheModel 元素的 name 属性值。属性 cacheModel 定义查询 mapped statement 的缓存。每一个查询 mapped statement 可以使用不同或相同的cacheModel,以下给出个例子。

<cacheModel id="product-cache" imlementation="LRU"(或 type ="LRU") [readOnly=“true” serialize=“false”]> // [ ] 表示可选
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name="size" value="1000" />
</cacheModel>

<statement id="getPoductList" parameerClass="int" cacheModel="product-cache">
select * from PRODUCT where PRD_CAT_ID = #value#
</statement>

// 使用“近期最少使用”(LRU)实现
// 上面例子中,“getProductList”的缓存每 24 小时刷新一次,或当更新的操作发生时刷新。一个 cacheModel 只能有一个 flushInteval 元素,它可以使用 hours,minutes,seconds或 milliseconds 来设定。某些 cache model 的实现可能需要另外的属性,如上面的“cache-size”属性。在 LRU cache model 中,cache-size指定了缓存储存的项数


缓存类型
Cache Model 使用插件方式来支持不同的缓存算法。它的实现在cacheModel 的用 type 属性来指定(如上所示)。指定的实现类必须实现 CacheController接口,或是下面 4个别名中的其中之一。Cache Model 实现的其他配置参数通过 cacheModel的 property元素来设置。目前包括以下的 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”属性的值必须是 STRONG,SOFT 和 WEAK 三者其一。这三个值分别对应于 JVM 不同的内存 reference类型。

"LRU" (com.ibatis.db.sqlmapache.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 Bean 的 ArrayList 对象都可以。因此,不要 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>

// property 的 size 同LRU

"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 的大小,持久化方法(内存,文件等)和集群方法。
要获得更详细的信息,请参考 OSCache 文档。OSCache 及其文档可以从 OpenSymphony
网站上获取:
http://www.opensymphony.com/oscache/
分享到:
评论

相关推荐

    Java ibatis缓存技术

    ### Java ibatis缓存技术详解 #### 一、ibatis缓存概述 ibatis是一款流行的持久层框架,它简化了Java应用程序与数据库之间的交互过程。ibatis提供了多种特性,其中包括缓存机制,这对于提高应用程序的性能至关重要...

    详细介绍Ibatis的用法

    - **`cacheModel`**:定义缓存策略,可以提高应用程序的性能。 - **动态SQL**:Ibatis支持动态SQL,可以通过`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签根据条件生成不同的SQL语句。 #### 缓存 - **只读...

    iBatis SQL Maps开发指南.pdf

    - **cacheModel**:定义缓存模型。 - **xmlResultName**:为结果集定义名称。 #### 4. 缓存机制 - **缓存Mapped Statement结果集**:iBatis提供了缓存功能,可以在一定程度上提高查询性能。 - **只读与可读写...

    ibatis技术总结

    1. **&lt;cacheModel&gt;**:定义缓存模型,用于控制查询结果的缓存行为。 2. **类别名**:用于在SQL映射文件中定义类型别名。 3. **参数类型外联映射关系**:定义参数类型与数据库列之间的映射关系。 4. **返回类型...

    ibatis学习资料

    - **缓存配置**:通过在`SqlMapConfig.xml`文件中配置`&lt;cacheModel&gt;`标签来启用缓存。 - **缓存的类型**:可以是LRU(最近最少使用)、FIFO(先进先出)等。 - **flushOnExecute**:控制是否在执行每次查询时刷新...

    ibatis 指导书 PDF

    - **cacheModel**:配置缓存模型。 - **xmlResultName**:为结果集指定名称。 - **ParameterMap 和 InlineParameter**:处理参数传递的方式。 - **基本类型输入参数**:处理 String、Integer 等基本类型参数。 - **...

    iBATIS 帮助文档

    - **cacheModel**:配置缓存策略,提高数据访问性能。 - **xmlResultName**:指定结果集的名称,便于在其他映射文件中引用。 #### 五、Parameter Map 与 Result Map - **Parameter Map**:通过 `&lt;parameter&gt;` ...

Global site tag (gtag.js) - Google Analytics