insertProduct"/> updateProduct"/> deleteProduct"/> product-cache"> select * from PRODUCT where PRD_CAT_ID = #value#
----------------------------------------------
MEMORY cache 实现使用 reference 类型来管理 cache 的行为。垃圾收集器可以根据 reference类型判断是否要回收 cache 中的数据。MEMORY实现适用于没有统一的对象重用模式的应用,或内存不足的应用。 MEMORY实现可以这样配置: MEMORY"> // MEMORY cache 实现只认识一个元素。这个名为“reference-type”属性的值必须是 STRONG,SOFT 和 WEAK 三者其一。这三个值分别对应于 JVM 不同的内存 reference类型。 "LRU" (com.ibatis.db.sqlmapache.lru.LruCacheController) LRU Cache 实现用“近期最少使用”原则来确定如何从 Cache 中清除对象。当 Cache 溢出时,最近最少使用的对象将被从 Cache 中清除。使用这种方法,如果一个特定的对象总是被使用,它将保留在 Cache 中,而且被清除的可能性最小。对于在较长的期间内,某些用户经常使用某些特定对象的情况(例如,在 PaginatedList 和常用的查询关键字结果集中翻 页),LRU Cache 是一个不错的选择。 LRU Cache实现可以这样配置: LRU"> // LRU Cache实现只认可一个 property元素。其名为“cache-size”的属性值必须是整数,代表同时保存在 Cache中对象的最大数目。值得注意的是,这里指的对象可以是任意的,从单一的 String 对象到 Java Bean 的 ArrayList 对象都可以。因此,不要 Cache太多的对象,以免内存不足。 ---------------------------------------------------------------------------------------------------------- "FIFO" (com.ibatis.db.sqlmap.cache.fifo.FifoCacheController) FIFO Cache 实现用“先进先出”原则来确定如何从 Cache 中清除对象。当 Cache 溢出时,最先进入 Cache 的对象将从 Cache 中清除。对于短时间内持续引用特定的查询而后很可能不再使用的情况,FIFO Cache 是很好的选择。 FIFO Cache可以这样配置: FIFO"> // property 的 size 同LRU -------------------------------------------------------------------------------------------------------------- "OSCACHE" (com.ibatis.db.sqlmap.cache.oscache.OSCacheController) OSCACHE Cache 实现是OSCache2.0缓存引擎的一个 Plugin。它具有高度的可配置性, 分布式,高度的灵活性。 OSCACHE 实现可以这样配置: OSCACHE"> // OSCACHE 实现不使用 property 元素,而是在类路径的根路径中使用标准的oscache.properties 文件进行配置。在 oscache.properties文件中,您可以配置 Cache 的算法(和上面讨论的算法很类似),Cache 的大小,持久化方法(内存,文件等)和集群方法。 要获得更详细的信息,请参考 OSCache 文档。OSCache 及其文档可以从 OpenSymphony 网站上获取: http://www.opensymphony.com/oscache/ cacheModel 3个属性: 1、type指定使用“近期最少使用”(LRU)实现。 2、属性readOnly如果不写,默认是true,这时的缓存效果无疑最好,因为系统不需要考虑更新操作引起缓存与实际数据不一致的问题,只读缓存的例子是固化到数据库中的一些配置参数表。但是,通常我们想缓存的数据是需要增删改的,这时务必记得要加上 readOnly = "false"; 3、属性serialize,如果不写,默认为false, 将它设为true,可以提高整体应用(而不仅仅是每个Session)的性能。这种缓存为每一个Session返回缓存对象不同的实例(复本)。因此每一个Session都可以安全修改返回的对象. 注意,此时readOnly必须为false。如果你把它设为 true ,记得检查两件事,一件事是缓存中存放的对象(你想查询的POJO)必须是可序列化的,即实现Serializable接口。如果你有一个复杂对象属性,它也必须满足这个规则,你的整个对象树必须是可序列化的。另一件事是关闭sql-map-config中的延迟加载属性,即lazyload=false,原因是,它使用了动态代理机制,那个代理对象并不是Serializable的。 cacheModel 3个子元素: 1、根据flushInterval元素的内容,上面的例子每24小时刷新一次。一个cacheModel只能有一个flushInterval,可以使用hours、minutes、seconds、milliseconds来设定。 2、cacheModel可以定义任意多的flushOnExecute元素。当insertUser,updateUser,deleteUser的Mapped Statement执行时,缓存也被刷新。 3、某些cacheModel的实现可能需要另外的属性,如上面的cache-size属性,在LRU Cache Model中,cache-size指定了缓存储存的项数。 一旦配置了cache model,你可以指定mapped statement使用的Cache Model,例如: select * from user cacheModel type的3种实现 MEMORY 没有统一的对象重用模式的应用,或内存不足的应用。 WEAK是默认,大多数情况下是最好的选择,能大大提高查用查询的性能,但对于当前不被使用的查询结果数据,将被清除以释放内存来分配其他对象。 size必须为整数,代表保存在Cache的中对象的最大数目。因此不要Cache太多的对象,以免内存不足。 size必须为整数,代表保存在Cache的中对象的最大数目。因此不要Cache太多的对象,以免内存不足。 更多详细内容请参考 《iBatis开发指南》,学习不错的一份资料! |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25436591/viewspace-708618/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25436591/viewspace-708618/