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

ibatis 缓存配置 相关参数说明和性能比较

    博客分类:
  • JAVA
阅读更多

1 SqlMapConfig.xml文档中参数配置
[standalone] 本属性表明XML文档是否是一个独立文档(standalone document)。它的值是根据XML声明(位于文档实体的首部)中的独立文档声明(在XML声明中是可选的)来设定的。如果没有独立文档声明,则该属性没有值(no value)。
关于XML,可以看一下这里的介绍:
http://www.w3china.org/translation/infoset_20011024_cn.htm


XML信息集Unicode中文版

至于cacheModelsEnabled属性指定了SQL Map运行时实例的缓存Model是否开启。

相关:
{
在<settings>元素中提供了多个属性来配置和优化SQL Map运行时的实例:
maxRequests属性指定了同时执行SQL语句最大运行数。

maxSessions属性指定了同一时间内活动的最大Session数。所谓Session就是一个请求或一个SQL Map运行时实例自动获得的会话。

maxTransactions属性指定了最大事务处理的线程数。

cacheModelsEnabled属性指定了SQL Map运行时实例的缓存Model是否开启。

lazyLoadingEnabled属性指定了持久化数据是否延迟加载。

enhancementEnabled属性指定了全局性的启用或禁用字节码增强,以优化访问POJO变量属性的功能。

useStatementNamespaces属性指定了在SQL Map映射文件中是否用全限定名来引用映射声明。
} 


2 
<settings cacheModelsEnabled="true" />是一定要配置的,不然cache不起作用。



readonly的配置



当readonly为true时,serialize是没有意义的,每个返回的对象就是cache中的对象,所以如果改动了该对象,则cache和数据库就不一致了。当readonly为true是不改动返回值要靠我们人工了。



当readonly为false时,serialize为false时,cache的实体是不需要实现Serializable的,但是很奇怪的
是,其返回的实体不是原本cache中的实体,改动返回值不会影响以后的返回值。serialize为true时,cache的实体是需要实现
Serializable的,其返回值应该是cache中的一个copy,所以可以随便修改而不影响cache。



看一个性能测试,对一行数据读取100000次。



条件                                       时间(毫秒)



没有cache     	                            53164 

readonly=true,                                 1406

readonly=false,serialize=false,               54538

readonly=false,serialize=true,                 4077



结论:

1 可以看出,加入cache后性能提升还是很可观的。

2 readonly=false,serialize=true的cache比readonly=true的慢一点,但是不是很多,想比没有cache的情况还是性能提升很大。

3 奇怪的readonly=false,serialize=false得到了解答,从测试结果看,应该是每一次都是到db直接读的,这个和没有配置cache差不多,又因为一些关于cache的code,应该比没有cache还慢一点点。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics