ibatis 缓存策略
sqlMapConfig 里面加入
maps.xml在 sqlMap 里面加入
Select 条目加入 cacheModel=\”nodeListCache\”
可以看到,Cache有如下几个比较重要的属性:readOnly,serialize,type
readOnly值的是缓存中的数据对象是否只读。这里的只读并不是意味着数据对象一旦放入缓存中就无法再对数据进行修改。
而是当数据对象发生变化的时候,如数据对象的某个属性发生了变化,则此数据对象就将被从缓存中废除,下次需要重新
从数据库读取数据,构造新的数据对象。如果需要全局的数据缓存,CacheModel的serialize属性必须被设为true。否则数据
缓存只对当前Session(可简单理解为当前线程)有效,局部缓存对系统的整体性能提升有限。与hibernate类似,ibatis通过
缓冲接口的插件式实现,提供了多种Cache的实现机制可供选择:
1. MEMORY
2. LRU
3. FIFO
4. OSCACHE
MEMORY类型Cache与WeakReference
MEMORY 类型的Cache 实现,实际上是通过Java 对象引用进行。ibatis 中,其实现类为
com.ibatis.db.sqlmap.cache.memory.MemoryCacheController,MemoryCacheController 内部,使用一个HashMap来保存
当前需要缓存的数据对象的引用。
LRU型Cache
当Cache达到预先设定的最大容量时,ibatis会按照“最少使用”原则将使用频率最少的对象从缓冲中清除。可配置
的参数有:flushInterval:指定了多长时间清除缓存,上例中指定每24小时强行清空缓存区的所有内容。
FIFO型Cache
先进先出型缓存,最先放入Cache中的数据将被最先废除。

