关于iBatis的缓存使用

在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)通常能获得较好的效果。

 

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

<!-- 缓存设置 -->
 <!--
  OSCACHE:OSCACHE Cache
  实现是OSCache2.0缓存引擎的一个Plugin,它具有高度的可配置性,分布式,高度的灵活性(很推荐使用该类型)OSCache可以通过oscache.properties文件进行缓存的相关配置。
 -->
 <cacheModel type="OSCACHE" id="User-cache" serialize="true" readOnly="false">
  <!--
   readOnly为false表示外部更改cahce内容无效;readOnly=false,Serialize=ture,
   所有session共享cache.
  -->
  <!-- Cache刷新间隔. 可以配置hours,minutes,seconds,milliseconds  -->
  <flushInterval minutes="30" />
  <!--
   当add被执行了,那么下次的查询将会通过SQL去查,同时用查询结果更新Cache;一般add(添加),update(修改),delete(删除)操作需要配置flushOnExecute.
  -->
  <flushOnExecute statement="User.add" />
  <flushOnExecute statement="User.updateUser" />
  <flushOnExecute statement="User.update" />
  <flushOnExecute statement="User.delete" /> 
  <flushOnExecute statement="User.setAllUserOffline" />
  <property name="size" value="3000" />
 </cacheModel>


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值