注: 跟笔者其它研究源码的博客一样, 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信息.
分享到:
相关推荐
1.需要将附件中2个jar放入lib中 2.将ehcache.xml放入能加载到classpath中的任意包中,不能放入...4.启动工程 如果工程不报错,并且启动日志包含大量|net.sf.ehcache.Cache:net.sf.ehcache.Cache 类似日志说明配置成功
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-...
2. **Cache**: 代表一个具体的缓存,存储键值对。每个Cache都有自己的配置,如最大元素数量、内存和磁盘策略等。 3. **Element**: 是Cache中的基本存储单元,包含键(Key)和值(Value)以及可能的过期时间和元数据...
Ehcache是一个开源的Java缓存库,广泛用于提高应用程序性能,通过存储数据副本来减少对数据库的访问。它在2.10.1版本中提供了优化的性能和功能,适用于各种规模的应用程序。"ehcache-2.10.1-distribution+所需jar包....
这个jar包是Ehcache的核心组件,包含了所有必要的类和资源,使得开发者能够方便地在他们的Java应用中集成缓存功能。 **Ehcache简介** Ehcache是由Terracotta公司开发的,它遵循Java Cache Specification (JSR-107)...
`net.sf.ehcache.CacheManager`类是实现这一功能的主要类,它维护了一个缓存的集合,并提供了添加、删除和获取缓存的操作。 2. **Cache(缓存)**:缓存是实际存储数据的容器,由`net.sf.ehcache.Cache`类表示。每...
接着,我们创建了一个`Element`对象,其中包含了要缓存的键值对,并使用`cache.put()`方法将其放入缓存。读取缓存时,我们使用`cache.get()`方法,如果找到对应的键,则返回对应的Element对象,从中提取出缓存的对象...
<cacheImpl class="org.mybatis.cache.ehcache.EhcacheCache"/> ... ``` 然后在Mapper接口中,使用`@Cacheable`注解标记需要缓存的方法: ```java import org.springframework.cache.annotation.Cacheable; ...
在Spring Boot的主配置类上添加`@EnableCaching`注解,并通过`spring.cache.type=ehcache`属性指定使用EhCache作为缓存提供者。 4. **更新配置**: 如果有自定义的`CacheManager`配置,需要在配置类中添加`@...
MyBatis Ehcache 1.0.2 是一个专门为MyBatis框架集成Ehcache缓存功能的库。在Java开发中,缓存是提升应用性能的重要手段,它能够减少数据库的访问频率,提高数据读取速度。Ehcache是一款广泛使用的开源Java分布式...
1. 定义一个或多个`<cache>`元素,每个元素代表一个缓存区域,可以设置缓存策略(如最大元素数量、内存和磁盘存储等)。 2. 设置缓存key的生成器,如使用`net.sf.ehcache.pool.sizeof.SizeOfKeyGenerator`来计算对象...
配置文件通常放在类路径下,可以通过`net.sf.ehcache.config.Configuration.fromXML()`方法加载。 2. **缓存对象**: 使用`CacheManager`实例来管理缓存,创建`Cache`对象并添加到`CacheManager`中。`Cache`对象是...
<groupId>net.sf.ehcache</groupId> <artifactId>ehcache <version>2.10.4 ``` 这里添加了Ehcache的依赖,版本为2.10.4。此外,还包括了Spring Boot Web Starter、MyBatis、MySQL数据库驱动以及MyBatis Plus...
spring.cache.type=ehcache ehcache.config.location=classpath:ehcache.xml ``` 3. **创建缓存配置**:编写`ehcache.xml`配置文件,定义缓存的命名空间、缓存策略等。 ```xml <ehcache xmlns:xsi=...
System.out.println("Get Non-Serializable value: " + cache.get("key7").getObjectValue().toString()); // 获得当前 cache 中的 element 数量 System.out.println("Current number of elements in cache: " +...
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml"/> <bean id="cacheService" class="com....
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory <property name="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</property> ``` ...
如果想强制使用特定的缓存,可以通过在配置文件`application.properties`或`application.yml`中设置`spring.cache.type=ehcache`来指定使用EhCache 2.x。 在进行EhCache配置之前,我们需要在项目中添加EhCache的...
import org.springframework.cache.ehcache.EhCacheCacheManager; import org.springframework.core.io.ClassPathResource; @Configuration @EnableCaching public class CacheConfig { @Bean public ...