Ibatis输出结果缓存元素---<cacheModel>

摘自:
http://blog.sina.com.cn/s/blog_5f6a2a1d0100druo.html

先看一个实例:
<cacheModel id="user-cache" type="LRU" readOnly="true" serialize="false">
<flushInterval hours="24"/>
<flushOnExecute statement="insertUser"/>
<flushOnExecute statement="updateUser"/>
<flushOnExecute statement="deleteUser"/>
<property.name="cache-size" value="1000"/>
</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的。

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>
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太多的对象,以免内存不足。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值