iBatis的Cache

Cache的key由haskcode、checksum、查询参数、sqlmap Id、sql语句、调用方法名等构成。不同的参数会有不同的Key。他不是以查询参数的Class的hashcode或toString方法作为key的一部分,而是以在sqlmap使用的变量的集合。

queryForObject和queryForList都可以缓存。其它片断不支持。 可以设定为定时刷新或受条件触发刷新Key。如:在执行Update的时候,可以刷新Cache。
刷新Cache时,无法手动控制刷新单条记录。只能刷新该Cache ID的全部Cache。 目前有4种Cache实现,但是无法自定义扩展Cache。 Cache的数量可以指定。 Cache的put和get方法内有同步,外部无。所以同一参数同时查询时,Cache是不能命中的。在有一个结果put到Cache后,后续查询才能命中。 

 

<cacheModel id="lruCache" type="LRU" serialize="true" readOnly="false"> 
        <property name="reference-type" value="WEAK"/> 
        <flushOnExecute statement="insertAccount"/> 
        <flushOnExecute statement="updateAccount"/>    
        <flushOnExecute statement="deleteAccountById"/> 
</cacheModel>

 

Type 目前有4种实现。建议用LRU或者OsCache

LRU,最后使用的排到前面。Cache溢出时,最远被使用的就被clear。
FIFO,先进先出。
Memory,内存引用。该实现无数量限制。前两种是基于jvm实现。
                WEAK,产生内存回收动作时,失效。
                SOFT,内存不足时,失效。 
                STRONG,显式刷新时,失效。
OsCache(支持分布式)。通过oscahce.properties控制。 


readOnly,表示Cache对象是否只读。False,表示外部更改cache内容无效。
Serialize,是否序列化。true,表示存贮到cache中的是系列化后的对象。
组合:
readOnly=false, Serialize=false:Cache Session有效。如:1+n时,下次1+n将会失效。 不系列化,外部更改有效。
readOnly=true, Serialize=false:所有session共享Cache,取出时实例是同一个。不系列化,外部更改有效。默认的
readOnly=false, Serialize=true:所有session共享Cache,取出时实例不一样,但是内容一样。 系列化,外部更改无效
readOnly=true, Serialize=true: 同默认效果一样。

你可能感兴趣的:(jvm,cache,ibatis,session,Class,扩展)