【第22期】观点:IT 行业加班,到底有没有价值?

ibatis 缓存设置 ------cacheModel

转载 2015年07月09日 08:39:33

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" parameterClass="int" cacheModel="product-cache">
    select * from PRODUCT where PRD_CAT_ID = #value#
</statement>

 

----------------------------------------------

    <cacheModel id="oneDayProduct" type="LRU">
        <flushInterval hours="24"/>
    </cacheModel>



// 使用“近期最少使用”(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/

cacheModel 3个属性:

1、type指定使用“近期最少使用”(LRU)实现。

2、属性readOnly如果不写,默认是true,这时的缓存效果无疑最好,因为系统不需要考虑更新操作引起缓存与实际数据不一致的问题,只读缓存的例子是固化到数据库中的一些配置参数表。但是,通常我们想缓存的数据是需要增删改的,这时务必记得要加上 readOnly = "false";

3、属性serialize,如果不写,默认为false, 将它设为true,可以提高整体应用(而不仅仅是每个Session)的性能。这种缓存为每一个Session返回缓存对象不同的实例(复本)。因此每一个Session都可以安全修改返回的对象. 注意,此时readOnly必须为false。如果你把它设为 true ,记得检查两件事,一件事是缓存中存放的对象(你想查询的POJO)必须是可序列化的,即实现Serializable接口。如果你有一个复杂对象属性,它也必须满足这个规则,你的整个对象树必须是可序列化的。另一件事是关闭sql-map-config中的延迟加载属性,即lazyload=false,原因是,它使用了动态代理机制,那个代理对象并不是Serializable的。

cacheModel  3个子元素:

1、根据flushInterval元素的内容,上面的例子每24小时刷新一次。一个cacheModel只能有一个flushInterval,可以使用hours、minutes、seconds、milliseconds来设定。

2、cacheModel可以定义任意多的flushOnExecute元素。当insertUser,updateUser,deleteUser的Mapped Statement执行时,缓存也被刷新。

3、某些cacheModel的实现可能需要另外的属性,如上面的cache-size属性,在LRU Cache Model中,cache-size指定了缓存储存的项数。

一旦配置了cache model,你可以指定mapped statement使用的Cache Model,例如:

<statement id="getUserList" cacheModel="user-cache">

select * from user

</statement>

cacheModel type的3种实现

MEMORY 没有统一的对象重用模式的应用,或内存不足的应用。

<property name="reference-type" value="WEAK"/>

WEAK是默认,大多数情况下是最好的选择,能大大提高查用查询的性能,但对于当前不被使用的查询结果数据,将被清除以释放内存来分配其他对象。
LRU  实现用近期最少使用的原则来确定如何从Cache中清除对象。对于较长的时间内,一些用户经常使用某些特定对象的情况(例如,在PaginatedList和常用的查询关键字结果集中翻页),LRU Cache是不错的选择。

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

size必须为整数,代表保存在Cache的中对象的最大数目。因此不要Cache太多的对象,以免内存不足。
FIFO  实现用先进先出的原则来确定如何从Cache中清除对象。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO是很好的选择。
根据个人实践,内存充足时使用LRU,否则使用MEMORY(WEAK)通常能获得较好的效果。

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

size必须为整数,代表保存在Cache的中对象的最大数目。因此不要Cache太多的对象,以免内存不足。

更多详细内容请参考 《iBatis开发指南》,学习不错的一份资料!

举报

相关文章推荐

ibatis缓存机制cacheModel

cachemodel是ibatis里面自带的缓存机制,正确的应用能很好提升我们系统的性能。使用方法:在sqlmap的配置文件中加入

OSCache页面缓存的基础入门

OSCache页面缓存 什么是OSCache? OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSC...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

OSCache入门配置

OSCache是一个开放式资源缓冲库,可从http://www.opensymphony.com/oscache免费下载。我用的是2.41版,它包括一组JSP的标签,通过它们可以很容易的在你的程序中实...

Github Mybatis深入学习之OSCache配置

Mybatis应用为对象数据添加缓存:OSCache就是其选择之一,另外它还支持cache和EHCache。原文地址:http://mybatis.github.io/oscache-cache/ 不...
  • boonya
  • boonya
  • 2013-11-13 09:37
  • 1793

OScache为web配置缓存

OSCache标记库由OpenSymphony设计,它是一种开创性的jsp定制标记应用,提供了在现有jsp页面之内实现快速内存缓冲的功能。OSCache是一个广泛采用的高性能的J2EE缓存框架,OSC...

oscache缓存配置

1.下载oscache:https://java.net/downloads/oscache/OSCache%202.4/oscache-2.4-full.zip 2..1  添加依赖包:oscach...
  • a4boy
  • a4boy
  • 2016-07-12 13:55
  • 295

oscache.properties文件配置

1、cache.memory 是否使用内存缓存;值为:true或false。默认为true;如设置为false,那cache只能缓存到数据库或硬盘中。 2、cache.capacity 缓存...

Spring基于注解的缓存配置--EHCache AND OSCache

一.简介  在spring的modules包中提供对许多第三方缓存方案的支持,包括:  EHCache  OSCache(OpenSymphony)  JCS  GigaSpaces  J...

用idea创建一个maven web项目

前言:虽然之前实习的时候有过spring框架的实践,但是因为基本上都是在已有的基础上进行修修补补,并没有对Spring框架有深刻的理解。所以从今天起,要从零开始对Spring框架进行学习。在此之前,第...

自定义缓存配置(非Web项目)

在前一篇烂文中,老周简单讲述了非Web应用的缓存技术的基本用法。其实嘛,使用系统默认方案已经满足我们的需求了,不过,如果你真想自己来配置缓存,也是可以的。 缓存的自定义配置可以有两种方案,一种是用代...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)