ibatis Cache技术介绍

本文详细介绍了iBatis的缓存机制,包括缓存的实现方式、配置方法及适用场景等内容。iBatis提供了四种缓存实现,并支持自定义缓存刷新策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

·  iBatis对查询结果集进行本地缓存。

·  Cachekeyhaskcodechecksum、查询参数、sqlmap Idsql语句、调用方法名等构成。由此可以看出,不同的参数会有不同的Key。注意,他不是以查询参数的Classhashcode toString方法作为key的一部分,而是以在sqlmap使用的变量的集合。

·  queryForObjectqueryForList都可以缓存。其它片断不支持。

·  可以设定为定时刷新或受条件触发刷新Key。如:在执行Update的时候,可以刷新Cache
刷新Cache时,无法手动控制刷新单条记录。只能刷新该Cache ID的全部Cache

·  目前有4Cache实现,但是无法自定义扩展Cache

·  Cache的数量可以指定。

·  Cacheputget方法内有同步,外部无。所以同一参数同时查询时,Cache是不能命中的。在有一个结果putCache后,后续查询才能命中。 

 

1、配置使用cache

<settings cacheModelsEnabled="true" useStatementNamespaces="true" />

 

2、配置cacheModel

<cacheModel type="LRU" id="wll-cache" readOnly="true" serialize="false">

        <property name="reference-type" value="WEAK"/>

        // flushOnExecute:设置执行哪些操作时更新缓存

        <flushOnExecute statement="STAFF_MAP.deleteByPrimaryKey"/> 

        <flushOnExecute statement="STAFF_MAP.updateByPrimaryKey"/>   

        <flushOnExecute statement="STAFF_MAP.insert"/>

  </cacheModel>

 

3、设置指定的select方法配置cache

<select id="selectListSelective" resultMap="StaffResultRow"parameterClass="staff" cacheModel="wll-cache">

      select * from from STAFF

</select>

 

二、Cache的规则

  • Type 目前有4种实现。建议用LRU或者OsCache
  • readOnly,表示Cache对象是否只读。False,表示外部更改cache内容无效。
  • Serialize,是否序列化。true,表示存贮到cache中的是系列化后的对象。
  • 组合:
    • readOnly=false, Serialize=falseCache Session有效。如:1+n时,下次1+n将会失效。 不系列化,外部更改有效。
    • readOnly=true, Serialize=false:所有session共享Cache,取出时实例是同一个。不系列化,外部更改有效。默认的
    • readOnly=false, Serialize=true:所有session共享Cache,取出时实例不一样,但是内容一样。 系列化,外部更改无效
    • readOnly=true, Serialize=true: 同默认效果一样。
    • 看得出,主要是通过系列化来保证外部更改属性后不影响其它session的取出的结果。 

 

三、4Cache体现

1LRU,最后使用的排到前面。

LRU Cache 实现用近期最少使用原则来确定如何从 Cache 中清除对象。当 Cache溢出时,最近最少使用的对象将被从 Cache 中清除。使用这种方法,如果一个特定的对象总是被使用,它将保留在 Cache中,而且被清除的可能性最小。对于在较长的期间内,某些用户经常使用某些特定对象的情况(例如,在PaginatedList 和常用的查询关键字结果集中翻页) LRU Cache 是一个不错的选择。   

 

2FIFO,先进先出。

FIFO Cache 实现用先进先出原则来确定如何从 Cache 中清除对象。当 Cache 溢出时,最先进入Cache 的对象将从 Cache 中清除。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO Cache 是很好的选择。

 

3Memory,内存引用。

MEMORY cache 实现使用 reference 类型来管理 cache 的行为。垃圾收集器可以根据 reference类型判断是否要回收 cache 中的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。

 

4OsCache(支持分布式)。通过oscahce.properties控制。 

OSCACHE Cache 实现是OSCache2.0缓存引擎的一个 Plugin。它具有高度的可配置性,分布式,高度的灵活性。

 

四、适用范围

  1. 频繁查询,很少更改的内容。如:分类等。
  2. 1+n查询。n是父类,数据量较少。如:查询Spu信息时,同意需要获得其品类信息。
  3. 效率低,执行频率高的SQL。如统计一类的SQL
  4. 有了Cache机制后,1+n不再可怕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值