首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Ehcache(4): net.sf.ehcache.Cache类代表个啥

2013-10-08 
Ehcache(四): net.sf.ehcache.Cache类代表个啥?注: 跟笔者其它研究源码的博客一样, Ehcache系列也是基于一

Ehcache(四): net.sf.ehcache.Cache类代表个啥?

注: 跟笔者其它研究源码的博客一样, Ehcache系列也是基于一个例子来debug地跟踪, 例子详见Ehcache(一): Spring + Ehcache开场白中的附件.如果没有例子作参照,阅读过程中可能有些摸不着头绪.
------------------------------???
?? ?Ehcache(三): Cache实例的get与set中, 我们看到一个Cache实例从CacheManager中get了出来,并又set给了MethodCacheInterceptor. 那么不禁要问: 这个get/set的Cache实例代表什么信息?

??? 家谱
???
本着尽可能多地吸收开源项目精华的原则, 我们还是来看Cache类的家谱. 在Eclipse中F4后,我们得到了如下所示的继承/实现关系.

Ehcache(4): net.sf.ehcache.Cache类代表个啥如图所示, Cache类现了Ehcache接口. 再看Ehcache接口又有什么特性呢?Ehcache接口里有定义了很多方法,不过我们这里只关注现在要用到的: get,put,remove.这几个方法也折射出Cache的实质:把数据放到缓存中, 从缓存中取出数据和从缓存中删除掉不再有意义的数据.




??? 上面我们从最根上看出Cache是Ehcache中存放数据的Cell,那么为了实现Ehcache接口中定义的方法(也即缓存的基本功能),这个Cache类又依赖什么或又有什么辅助属性呢? 我们看到有这样的属性:
??? 1, 真正存放数据的地方: diskStore(net.sf.ehcache.store.Store类型) , memoryStore(net.sf.ehcache.store.MemoryStore类型).
??? 2, 与命中与否相关的统计信息:? hitCount,memoryStoreHitCount,diskStoreHitCount,missCountNotFound,missCountExpired
??? 3, 与事件相关的监听: registeredEventListeners.
???
??? 何时创建/创建时用到什么信息?
?? ?? ?Ehcache(三): Cache实例的get与set中我们顺藤摸瓜地看到一个Cache实例是在(或者说可以在)ConfigurationHelper类的createCache(CacheConfiguration cacheConfiguration)方法创建出来. 方法中我们看到了如下代码:

?? ???? Cache cache = new Cache(cacheConfiguration.name,
??????????????? cacheConfiguration.maxElementsInMemory,
??????????????? cacheConfiguration.memoryStoreEvictionPolicy,
??????????????? cacheConfiguration.overflowToDisk,
??????????????? getDiskStorePath(),
??????????????? cacheConfiguration.eternal,
??????????????? cacheConfiguration.timeToLiveSeconds,
??????????????? cacheConfiguration.timeToIdleSeconds,
??????????????? cacheConfiguration.diskPersistent,
??????????????? cacheConfiguration.diskExpiryThreadIntervalSeconds,
??????????????? null,
??????????????? null,
??????????????? cacheConfiguration.maxElementsOnDisk,
??????????????? cacheConfiguration.diskSpoolBufferSizeMB);

??? 构造方法中绝大多数地用到了cacheConfiguration实例, 写到这里相信大家也都能看出来了: 一个Cache对象对应着ehcache.xml配置文件中一个<cache>标签. 也即如下的配置信息:

?? ???? <cache name="com.rmn190.MethodCache"
??????????? maxElementsInMemory="10"
??????????? eternal="false"
??????????? timeToIdleSeconds="200"
??????????? timeToLiveSeconds="300"
??????????? overflowToDisk="true"
??????????? />

??? 也就是说,一个Cache对象对应着Ehcache项目在内存或磁盘里根据<cache>标签里信息划分出来的一个存储空间,为了使用上的方便,给这存储空间起了个名字,即<cache>标签中的name信息.

1 楼 chenyongxin 2009-05-10   看完了你的东西,如果参数是一个复杂对象改怎么办?比较我们使用的时候和大一部分是使用bean封装一个对象的。

热点排行