• ibatis缓存配置


    sql配文件中的缓存配置

    <cacheModel id="user-cache" type="LRU">
    <flushInterval hours="24"/>
    <flushOnExecute statement="insertUser"/>
    <flushOnExecute statement="deleteUserByID"/>
    <flushOnExecute statement="updateUserByUser"/>
    <property name="size" value="1000"/>
    </cacheModel>
    ---------------------
    <!--查询全部-->
    <select id="findAllUser" resultClass="com.tq365.vo.User" cacheModel="user-cache">
    select * from t_user join t_address on t_user.uid=t_address.uid
    </select>

    findAllUser”的缓存使用 WEAK 引用类型,每 24 小时刷新一次,或当更新的操作发生时刷新。  
    Cache Model 使用插件方式来支持不同的缓存算法。它的实现在 cacheModel 的用 type属性来指定(如上所示)。指定的实现类必须实现 CacheController接口,或是下面 4个别名中的其中之一。Cache Model 实现的其他配置参数通过 cacheModel的 property元素来设置。目前包括以下的 4 个实现:

    1.  "MEMORY” (com.ibatis.db.sqlmap.cache.memory.MemoryCacheController) 。MEMORY cache 实现使用 reference 类型来管理 cache 的行为。垃圾收集器可以根据 reference类型判断是否要回收 cache 中的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。
    2. “LRU” (com.ibatis.db.sqlmap.cache.lru.LruCacheController) 。LRU Cache 实现用“近期最少使用”原则来确定如何从 Cache 中清除对象。当 Cache溢出时,最近最少使用的对象将被从 Cache 中清除。使用这种方法,如果一个特定的对象总是被使用,它将保留在 Cache 中,而且被清除的可能性最小。对于在较长的期间内,某些用户经常使用某些特定对象的情况(例如,在 PaginatedList 和常用的查询关键字结果集中翻页) ,LRU Cache 是一个不错的选择。   
    3. “FIFO” (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController) 。FIFO Cache 实现用“先进先出”原则来确定如何从 Cache 中清除对象。当 Cache 溢出时,最先进入 Cache 的对象将从 Cache 中清除。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO Cache 是很好的选择。 
    4.  “OSCACHE” (com.ibatis.db.sqlmap.cache.oscache.OSCacheController)  。OSCACHE Cache 实现是OSCache2.0缓存引擎的一个 Plugin。它具有高度的可配置性,分布式,高度的灵活性。

    readOnly : 是否只读. 默认为true, 只读.

    serialize : 是否从Cache中读取同一个对象,还是对象的副本.
               只有在readOnly=false才有效.
       因为Cache是只读的,那么为不同session返回的对象肯定是一个.
       只有在Cache是可读写的时候,才需要为每个session返回对象的副本.

    flushInterval : Cache刷新间隔. 可以配置hours,minutes,seconds,milliseconds.
               注: 不是说,间隔时间到了,在Cache的statement会自己刷新,而是说,在间隔时间过了后,下次的查询
       将不会从Cache中直接去值,而会用SQL去查.也就是: 如果,间隔时间过了,还没有Cache对应的statement执行
       的话,那么Cache中就会一直是旧的,不用担心Cache数据是旧的,因为下次的查询将会直接从SQL查询,而非Cache,查询的结果也会去更新Cache的值.

    flushOnExecute : 当这些statement被执行了,那么下次的查询将会通过SQL去查,同时用查询结果更新Cache.
               注: 和flushInterval的刷新一样,不是主动刷新,而是由下次查询来触发被动刷新.
                   在一个cacheModel中可以指定多个flushOnExecute.

    property : 这是针对cacheModel的额外的一些属性配置.不同type的cacheModel将会有自己专有的一些property配置.
              FIFO: <property name="size" value="100" />
              LRU: <property name="cache-size" value="100" />
      MEMORY: <property name="reference-type" value="WEAK" />

  • 相关阅读:
    在LINQTOSQL中实现“级联删除”的方法
    “BindingNavigator”如何在删除前弹出确认框?
    OOP设计思考——究竟是继承自普通类,还是继承自抽象类?
    ASP.NET控件为什么无法使用结构?
    如何消除Web自定义控件的“自生成”复合属性的冗余类名称?
    用C#动态输出js单引号问题
    关于ready和load方法作用于不同情况下的比较
    关于CodeSign error : Certificate identity 'iPhone Distribution *** : ...问题
    [iOS]Xcode4/iOS5调试UncaughtException崩溃First throw call stack不打印方法名的解决方案
    Lion版本Mac OS下查看iPhone Simulator目录
  • 原文地址:https://www.cnblogs.com/archie2010/p/1897981.html
Copyright © 2020-2023  润新知