IBatis学习关于缓存的使用范例

    在特定硬件基础上(同时假设系统不存在设计上的缺漏和糟糕低效的SQL 语句)Cache往往是提升系统性能的最关键因素)。
    相对Hibernate 等封装较为严密的ORM 实现而言(因为对数据对象的操作实现了较为严密的封装,可以保证其作用范围内的缓存同步,而ibatis 提供的是半封闭的封装实现,因此对缓存的操作难以做到完全的自动化同步)。

    ibatis 的缓存机制使用必须特别谨慎。特别是flushOnExecute 的设定(见“ibatis配置”一节中的相关内容),需要考虑到所有可能引起实际数据与缓存数据不符的操作。如本模块中其他Statement对数据的更新,其他模块对数据的更新,甚至第三方系统对数据的更新。否则,脏数据的出现将为系统的正常运行造成极大隐患。如果不能完全确定数据更新操作的波及范围,建议避免Cache的盲目使用。 

 

4种缓存模式的基本配置(Xxx.xml中):

    MEMORY类型的Cache正是借助SoftReference、WeakReference以及通常意义上的Java
Reference实现了对象的缓存管理。

    LRU型Cache 当Cache达到预先设定的最大容量时,ibatis会按照“最少使用”原则将使用频率最少
的对象从缓冲中清除。

    FIFO型Cache
先进先出型缓存,最先放入Cache中的数据将被最先废除。

    OSCache与上面几种类型的Cache不同,OSCache来自第三方组织Opensymphony   

 

<!--type: MEMORY;FIFO(先进先出);LRU(最少使用);OSCACHE; 以上4者均为缩写-->


    <cacheModel id="deptCacheWithMEMORY" type="MEMORY" readOnly="false" serialize="true">
        <!--flushInterval 间隔多长时间清除缓存 -->
        <!--flushOnExecute 当发生什么操作时清除缓存 -->
     <flushInterval hours="12"/>
     <flushOnExecute statement="Department.addOneDept"/>
     <flushOnExecute statement="Department.updateOneDept"/>
     <flushOnExecute statement="Department.deleteOneDept"/>
     <property name="reference-type" value="WEAK"/>
    </cacheModel>
   
    <cacheModel id="deptCacheWithFIFO" type="FIFO" readOnly="false" serialize="true">
        <!--flushInterval 间隔多长时间清除缓存 -->
        <!--flushOnExecute 当发生什么操作时清除缓存 -->
     <flushInterval hours="12"/>
     <flushOnExecute statement="Department.updateOneDept"/>
     <property name="size" value="2"/>
    </cacheModel>
   
 <cacheModel id="deptCacheWithLRU" type="LRU" readOnly="false" serialize="true">
        <!--flushInterval 间隔多长时间清除缓存 -->
        <!--flushOnExecute 当发生什么操作时清除缓存 -->
     <flushInterval hours="12"/>
     <flushOnExecute statement="Department.updateOneDept"/>
     <property name="size" value="10"/>
    </cacheModel>
   
    <!--cacheModel:此查询所使用的缓存模式 -->
 <select id="getAllDeptWithMemory" resultClass="department"  cacheModel="deptCacheWithMEMORY">
  select deptNo,dname as deptName,loc as location from dept
 </select>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值