`

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信息.

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

相关推荐

    ehcahe页面缓存详细内容

    1.需要将附件中2个jar放入lib中 2.将ehcache.xml放入能加载到classpath中的任意包中,不能放入...4.启动工程 如果工程不报错,并且启动日志包含大量|net.sf.ehcache.Cache:net.sf.ehcache.Cache 类似日志说明配置成功

    ehcache所需jar包

    ehcache所需jar包 cglib-nodep-2.2.jar ehcache-core-2.5.2.jar ehcache-spring-annotations-1.2.0.jar guava-13.0.1.jar ehcache-terracotta-2.5.2.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar terracotta-...

    EHCACHE简介

    2. **Cache**: 代表一个具体的缓存,存储键值对。每个Cache都有自己的配置,如最大元素数量、内存和磁盘策略等。 3. **Element**: 是Cache中的基本存储单元,包含键(Key)和值(Value)以及可能的过期时间和元数据...

    ehcache-2.10.1-distribution+所需jar包.zip

    Ehcache是一个开源的Java缓存库,广泛用于提高应用程序性能,通过存储数据副本来减少对数据库的访问。它在2.10.1版本中提供了优化的性能和功能,适用于各种规模的应用程序。"ehcache-2.10.1-distribution+所需jar包....

    ehcache-1.2.2.jar

    这个jar包是Ehcache的核心组件,包含了所有必要的类和资源,使得开发者能够方便地在他们的Java应用中集成缓存功能。 **Ehcache简介** Ehcache是由Terracotta公司开发的,它遵循Java Cache Specification (JSR-107)...

    ehcache jar包 源码

    `net.sf.ehcache.CacheManager`类是实现这一功能的主要类,它维护了一个缓存的集合,并提供了添加、删除和获取缓存的操作。 2. **Cache(缓存)**:缓存是实际存储数据的容器,由`net.sf.ehcache.Cache`类表示。每...

    cache/ehcache缓存使用

    接着,我们创建了一个`Element`对象,其中包含了要缓存的键值对,并使用`cache.put()`方法将其放入缓存。读取缓存时,我们使用`cache.get()`方法,如果找到对应的键,则返回对应的Element对象,从中提取出缓存的对象...

    springboot+mybatis+ehcache实现缓存数据

    &lt;cacheImpl class="org.mybatis.cache.ehcache.EhcacheCache"/&gt; ... ``` 然后在Mapper接口中,使用`@Cacheable`注解标记需要缓存的方法: ```java import org.springframework.cache.annotation.Cacheable; ...

    Spring Boot的EhCache缓存使用.docx

    在Spring Boot的主配置类上添加`@EnableCaching`注解,并通过`spring.cache.type=ehcache`属性指定使用EhCache作为缓存提供者。 4. **更新配置**: 如果有自定义的`CacheManager`配置,需要在配置类中添加`@...

    mybatis-ehcache-1.0.2.jar

    MyBatis Ehcache 1.0.2 是一个专门为MyBatis框架集成Ehcache缓存功能的库。在Java开发中,缓存是提升应用性能的重要手段,它能够减少数据库的访问频率,提高数据读取速度。Ehcache是一款广泛使用的开源Java分布式...

    mybatis3添加Ehcache缓存

    1. 定义一个或多个`&lt;cache&gt;`元素,每个元素代表一个缓存区域,可以设置缓存策略(如最大元素数量、内存和磁盘存储等)。 2. 设置缓存key的生成器,如使用`net.sf.ehcache.pool.sizeof.SizeOfKeyGenerator`来计算对象...

    ehcache1.6 和 ehcache-web-2.0.4

    配置文件通常放在类路径下,可以通过`net.sf.ehcache.config.Configuration.fromXML()`方法加载。 2. **缓存对象**: 使用`CacheManager`实例来管理缓存,创建`Cache`对象并添加到`CacheManager`中。`Cache`对象是...

    SpringBoot 集成Ehcache实现缓存

    &lt;groupId&gt;net.sf.ehcache&lt;/groupId&gt; &lt;artifactId&gt;ehcache &lt;version&gt;2.10.4 ``` 这里添加了Ehcache的依赖,版本为2.10.4。此外,还包括了Spring Boot Web Starter、MyBatis、MySQL数据库驱动以及MyBatis Plus...

    37. Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】

    spring.cache.type=ehcache ehcache.config.location=classpath:ehcache.xml ``` 3. **创建缓存配置**:编写`ehcache.xml`配置文件,定义缓存的命名空间、缓存策略等。 ```xml &lt;ehcache xmlns:xsi=...

    Ehcache集群环境配置

    System.out.println("Get Non-Serializable value: " + cache.get("key7").getObjectValue().toString()); // 获得当前 cache 中的 element 数量 System.out.println("Current number of elements in cache: " +...

    ehcache-terracotta代码配置

    Ehcache是一个流行的Java缓存库,用于提高应用程序性能,减少对数据库的访问。当与Terracotta结合使用时,Ehcache可以实现分布式缓存,使得多台服务器上的应用可以共享同一份缓存数据,从而构建高可用的集群环境。在...

    spring整合ehCache

    &lt;bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"&gt; &lt;property name="configLocation" value="classpath:ehcache.xml"/&gt; &lt;bean id="cacheService" class="com....

    在Spring+Hibernate集成环境中使用EhCache缓存

    &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory &lt;property name="net.sf.ehcache.configurationResourceName"&gt;ehcache-hibernate.xml&lt;/property&gt; ``` ...

    Spring Boot 2.x的EhCache缓存的使用问题详解.docx

    如果想强制使用特定的缓存,可以通过在配置文件`application.properties`或`application.yml`中设置`spring.cache.type=ehcache`来指定使用EhCache 2.x。 在进行EhCache配置之前,我们需要在项目中添加EhCache的...

Global site tag (gtag.js) - Google Analytics