补充关于iBatis的缓存使用

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在你的xml配置文件中,每一个 cacheModel 元素,如下

<cacheModel id="oneday_cache" type="LRU" readOnly="false" serialize="true">

<flushInterval hours="24"/>

<flushOnExecute statement="updateMyDate"/>

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

</cacheModel>

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

2 属性serialize,如果不写,默认为false, 将它设为true,可以提高整体应用(而不仅仅是每个Session)的性能。 这种缓存为每一个Session返回缓存对象不同的实例(复本)。因此每一个Session都可以安全修改返回的对象. 注意,此时readOnly必须为false。

如果你把它设为 true ,记得检查两件事,一件事是缓存中存放的对象(你想查询的POJO)必须是可序列化的, 即实现Serializable接口。如果你有一个复杂对象属性,它也必须满足这个规则,你的整个对象树必须是可序列化的。

另一件事是关闭sql-map-config中的延迟加载属性,即lazyload=false,原因是,它使用了动态代理机制, 那个代理对象并不是Serializable的。

缓存类型的最佳适应情形:

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

LRU 在较长的期间内,用户经常使用某些特定对象。

FIFO 用户在短时间内持续引用特定的查询,而后很可能不再使用。

根据个人实践,内存充足时使用LRU,否则使用MEMORY(WEAK)通常能获得较好的效果。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航