IBATIS的CACHEMODEL
来源:互联网 发布:python 搭建技术博客 编辑:程序博客网 时间:2024/06/06 20:02
cachemodel是ibatis里面自带的缓存机制,正确的应用能很好提升我们系统的性能。
使用方法:在sqlmap的配置文件中加入
<cacheModel type="LRU" id="article_cache" readOnly="true" serialize="false">
<flushInterval hours="24"/>
<flushOnExecute statement="articleLists.insertArticle"/>
<property name="cache_size" value="50"/>
</cacheModel>
在查询语句中使用缓存
<select id="getArticles" resultClass="articleList" parameterClass="articleList" cacheModel="article_cache">
先对cachemodel中一些用法进行解释一下:
type:是缓存的类型,ibatis中有4种方式,分别为MEMORY、LRU、FIFO、OSCACHE
MEMORY是内存缓存,和Java内存管理机制类似分为[SOFT、WEAK、STRONG]
LRU是使用最近最少使用策略
FIFO是使用先进先出策略
OSCACHE是通过第三方的缓存插件实现
id:是cachemodel的一个标识
readOnly:指缓存的数据对象是只读还是可读写,默认只读,这里的只读并不是意味着数据对象一旦放入缓存中就无法再对数据进行修改。而是当数据对象发生变化的时候,如数据对象的某个属性发生了变化,则此数据对象就将被从缓存中废除,下次需要重新从数据库读取数据,构造新的数据对象。而readOnly="false"则意味着缓存中的数据对象可更新.
serialize:只有在readOnly为false的情况下才生效,因为在readOnly为true时,所有数据对象相同,只有可读写时,才会出现不同的session拥有不同的数据对象副本。
flushInterval:指定缓存自动刷新的时间,可以为hours,minutes,seconds,milliseconds.
flushOnExecute:指定在发生哪些操作时,更新缓存。
property:不同type的cachemodel有不同的属性。
----------------------------------------------------------------------------
下面是本人自己做的实验的一些结果:
(1)当readOnly=true ,serialize=false,只指定insert更新缓存时,我在update一个article的属性后,发现之前的相同的查询条件查询结果是缓存的内容,没取到更新的结果;当我改变查询条件时,出现了更新的结果。由此可见当readonly=true,查询条件不变时,即使发生更新,缓存仍然有效;而查询条件变更时,缓存失效,用新的sql去数据库查询。当发生insert操作时,不管查询条件是否变化,都重新去数据库查询,缓存被更新。
(2)当readOnly=false,serialize=false,只指定insert更新缓存时,update一个article属性后,缓存失效,重新去数据库查询
综上来看,对更新比较频繁的数据,使不使用感觉效率差不多,对更新不是很频繁的数据,使用缓存效率还是能提升的!
- ibatis的cacheModel
- ibatis的cacheModel
- ibatis的cacheModel
- IBATIS的CACHEMODEL
- Ibatis的resultMap的cacheModel研究
- ibatis的cacheModel刷新失效问题
- ibatis 缓存 (cacheModel)
- ibatis 缓存 (cacheModel)详解
- ibatis cachemodel缓存实践
- iBATIS CacheModel使用浅析
- ibatis 缓存设置 ------cacheModel
- ibatis缓存机制cacheModel
- ibatis 缓存设置 cacheModel
- 【Ibatis】(十四)、cacheModel详解
- iBATIS缓存cacheModel属性浅析
- iBATIS缓存cacheModel属性浅析
- ibatis 实现cache 注解+cacheModel实现
- 使用SQL Cache Dependency 代替 Ibatisnet 提供的CacheModel
- android获取标题栏、状态栏的高度?
- HTML5中使用图片隐藏传递密文
- 【Flask】使用Flask-Admin内建的JS控件获取日期和时间
- 7.OpenGL--光照
- view.getX和view.getTranslationX区别?
- IBATIS的CACHEMODEL
- FastDFS介绍和配置过程
- Jquery的 each的使用 $.each()
- getChildDrawingOrder()?
- 让父进程在退出时所有的子进程连同用system启动的进程一同退出
- unity实现dialog效果教程
- 数据流中的中位数
- 修改数据库大小
- Masonry和FDTemplateLayoutCell 结合使用Demo