- 缓存的readOnly到底有什么意义?
看到的中文文档多数都是对此草草带过,说readOnly为true的缓存是只读,为false的是可读写。可是“可读写”三个字写起来容易,到底是怎么个“可读写”法我却一直没想明白。理想化一点的想法是将vo的内容先写入缓存,然后由Ibatis统一控制其内容的持久化。今天又在设计一个网站的dao层,终于抽空看了看《Ibatis In Action》,这才搞明白,所谓readOnly的缓存,其实就是当应用需要从缓存中获取对象时,Ibatis直接将一个对象的引用传递给应用,因为反正对象是只读的,传递引用无疑会有最好的性能;而readOnly为false时(同时最好serialize为true,这个好理解),Ibatis则传递给应用一个当前对象的副本——恍然大悟。 - 缓存的刷新和过期
Ibatis在设置缓存的时候,有个flushOnExecute的标签,当其中的方法执行时,即刷新缓存。我一直不明白的是,这个刷新缓存,是刷新全部缓存还是只刷新与特定对象相关的缓存。更直接点说,要看这个缓存的Key是Prepare Statement呢,还是Prepare Statement与statement语句参数值的集合。后者的效能显然更好一些,比如我更新了id为1的一条记录,那么只刷新select * from table where id='1'的缓存,而不是刷新所有与之相关的缓存。但是如果这样的话,Ibatis对缓存的管理任务无疑是相当繁重的,而且在设计时大概就需要引入新的标签了。所以看起来前者的可能性更大。
今天也顺便查了《Ibatis In Action》,确实如上所述。如此以来,要想很好的利用Ibatis的缓存,那么在使用Ibatis标签的时候,就要有从更细致的粒度去考虑设计了。
香菜芹菜辣青椒,茄子扁豆嫩蒜苗,好大的黄瓜你们谁要,一个铜子儿拿两条。
2008-06-16
Ibatis缓存
用Ibatis做了一个项目了,关于它的缓存管理有两个问题一直没弄得很明白:
订阅:
博文评论 (Atom)
没有评论:
发表评论