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后,我们得到了如下所示的继承/实现关系.

如 图所示, 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信息.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值