cache介绍及应用

为什么要缓存:一句话,减少服务器处理次数,加快访问速度

 

Ibatis的缓存代码

 

使用ibatis缓存的方法:

在对应每个表的xml中加入一个cacheModel模块,例如:

 

<cacheModel id="user-cache" type="LRU" readOnly="false"serialize="true"> 
<flushInterval hours="24" /> 
<flushOnExecute statement="getUser" /> 
<property value="600" name="size" /> 
</cacheModel> 

  

id :cacheModel的id.。

type :cache的类型.。

ibatis目前提供了LRU,MEMORY,FIFO,OSCACHE这四种.

FIFO:com.ibatis.sqlmap.engine.cache.fifo.FifoCacheController

LRU:com.ibatis.sqlmap.engine.cache.fifo.LruCacheController

MEMORY:com.ibatis.sqlmap.engine.cache.fifo.MemoryCacheController

OSCACHE:com.ibatis.sqlmap.engine.cache.fifo.OSCacheController

当然,你也可以自己来实现Cache, 你需要做的是让你的Cache类 implements com.ibatis.sqlmap.engine.cache.CacheController. 

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" />

 

在statment的使用上,直接加一个cacheModel属性指向id即可。

<select id="getAllUser" resultClass="user" cacheModel="user-cache"> 
select * from user; 
</select>


 

 

 

cache类型:
1. LRU型Cache
当Cache达到预先设定的最大容量时,ibatis会按照“最少使用”原则将使用频率最少的对象从缓冲中清除。
2. 在生产部署时,建议采用OSCache,OSCache 是得到了广泛使用的开源Cache 实现(Hibernate 中也提供了对OSCache 的支持),它基于更加可靠高效的设计,更重要的是,最新版本的OSCache 已经支持Cache 集群。如果系统需要部署在集群中,或者需要部署在多机负载均衡模式的环境中以获得性能上的优势,那么OSCache在这里则是不二之选。
Ibatis中对于OSCache的配置相当简单:
<cacheModel id="userCache" type="OSCACHE">
<flushInterval hours="24"/>
<flushOnExecute statement="updateUser"/>
<property name="size" value="1000" />
</cacheModel>
之所以配置简单,原因在于,OSCache拥有自己的配置文件(oscache.properties)J。配置好之后,将此文件放在CLASSPATH 中,OSCache 在初始化时会自动找到此文件并根据其中的配置创建缓存实例。

注意:本模块中其他Statement对数据的更新,其他模块对数据的更新,甚至第三方系统对数据的更新。否则,脏数据的出现将为系统的正常运行造成极大隐患。如果不能完全确定数据更新操作的波及范围,建议避免Cache的盲目使用。
2. 只读Cache能提供更高的读取性能,但一旦数据发生改变,则效率降低。系统设计时需根据系统的实际情况(数据发生更新的概率有多大)来决定Cache的读写策略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值