Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。
你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处:
· 在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
· 发布时可更改Cache配置。
· 可再安装阶段就检查出配置错误信息,而避免了运行时错误。
在我的项目中:
spring中定义ehcache支持:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
<ehcache:annotation-driven />
<ehcache:config cache-manager="cacheManager">
<ehcache:evict-expired-elements interval="60" />
</ehcache:config>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:cache/ehcache.xml"/>
</bean>
<bean id="productKeyGenerator" class="**.**.cache.ProductCacheKeyGenerator"/>
</beans>
可以看到这里定义的cache使用的主配置文件是classpath下的cache文件夹下的ehcache.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<diskStore path="user.home/web_ehcache/" />
<defaultCache
maxElementsInMemory="3000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="true"
diskSpoolBufferSizeMB="20"
maxElementsOnDisk="100"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="100"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="AAACache"
maxElementsInMemory="3000"
maxElementsOnDisk="7000"
eternal="false"
overflowToDisk="true"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
memoryStoreEvictionPolicy="LFU"
/>
</ehcache>
defaultCache是默认的缓存配置,AAACache是我自己定义的缓存策略,里面各个properties的含义可以自己去查资料很清楚,上面的diskStore path是缓存文件简历的目录,user.home是使用的系统的变量,就是你这个用户的文件夹,such as : C:\Documents and Settings\user\My Documents\...
缓存实际对反复查询的条件返回的一个结果进行缓存,而缓存的KEY,也是缓存的凭据一般就是使用这些查询的条件,这里我们可以定制我们的缓存KEY,可以从我的spring的配置文件中查询得到我定义了一个productKeyGenerator。 这个东西就是用来针对product查询生成缓存key的一个key生成器。
public class ProductCacheKeyGenerator implements CacheKeyGenerator<Serializable> {
@Override
public Serializable generateKey(MethodInvocation methodInvocation) {
String product = String.format("product_of_%s", methodInvocation.getArguments()[0]);
return product;
}
@Override
public Serializable generateKey(Object... data) {
// TODO Auto-generated method stub
return null;
}
}
这样所有生成的缓存关于查询product的进这个缓存key生成器的都会给它的缓存取一个名字叫product_of_%s %s这里就是传过来的参数的第一个值。
最后看看怎么在后台的数据访问层使用这个缓存和缓存KEY生成器:
@Cacheable(cacheName="AAACache",keyGeneratorName="productKeyGenerator" )
public List<Product> listProductsByRegion(String regionId);
这里的keyGeneratorName就是我spring里面配置的这个KEY生成器的BEAN ID。CACHENAME就是我要应用的缓存策略,你可以理解为就是个性缓存。
这样缓存配置就完成了,在应用这个操作的时候,如果你给listProductsByRegion方法传递的参数是'ABC',你可以发现后台日志会记录生成一个product_of_ABC的缓存数据。以后在策略配置的范围内每调用这个方法都会应用到生成的这个缓存。
分享到:
相关推荐
**Ehcache 使用详解** Ehcache 是一个广泛使用的开源Java缓存库,它提供了内存和磁盘存储的二级缓存机制,以提高...在阅读`ehcache使用文档e.doc`后,你将对Ehcache有更深入的理解,并能自如地将其应用到你的项目中。
EhCache使用详解,HIBERNATE缓冲
每次需要shiro做权限控制, Realm的授权方法就会被调用, 查询数据库重新完成授权! 问题: 性能开销比较大 解决: 对用户授权,只进行一次 查询,查询后,将用户授权信息放入缓存中,以后需要授权时,直接从缓存...
**Ehcache 使用详解与集群配置** Ehcache 是一个广泛使用的开源Java缓存系统,它提供了内存和磁盘存储,以及对缓存数据的分布式处理能力。在Java应用程序中,Ehcache能够显著提高性能,减少数据库负载,通过缓存...
### Ehcache 使用详解 #### 一、概述 Ehcache 是一款开源的、纯 Java 缓存框架,它能够提供高性能、低延迟的数据缓存功能。Ehcache 的设计目标是提高应用程序性能,通过减少对数据库或其他外部系统的依赖来达到这...
默认情况下,ehCache使用LRU策略。 5. **缓存过期策略**:通过设置`<cache>`元素的`timeToLiveSeconds`和`timeToIdleSeconds`属性,可以控制缓存在创建后多长时间内有效或者在未被访问多长时间后过期。 6. **...
### Ehcache使用文档知识点解析 #### 一、Ehcache简介与特点 **Ehcache** 是一款高性能、轻量级且易于使用的进程内缓存解决方案。它支持多种缓存模式,包括只读(read-only)和读写(read/write),并且能够存储...
通过这些示例,我们可以学习如何设置Ehcache的分布式特性,例如使用Terracotta服务器进行集群缓存,以及如何处理分布式环境下的缓存一致性问题。 总结来说,Ehcache的监控涉及了多个方面,包括但不限于使用JMX、Web...
**EHCache的使用随记** EHCache是一款广泛应用于Java环境中的高效、易用且功能丰富的内存缓存系统。它能够显著提升应用性能,通过将常用数据存储在内存中,避免了反复从数据库读取,降低了I/O延迟。本文将探讨...
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 使用 XML 配置文件进行初始化设置,包括缓存的大小、过期策略、缓存策略等。例如: ```xml maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120"> ``...
### EHCache的使用详解 #### 一、EHCache概述与特点 EHCache 是一款非常流行的开源缓存组件,由 SourceForge 提供支持。作为一个纯 Java 实现的高性能缓存库,EHCache 在处理高并发场景下表现优异。其主要特点包括...
1. **内存管理**:Ehcache 使用LRU(Least Recently Used)策略来管理缓存中的对象,确保最常用的项保持在内存中。此外,它还提供了大小限制,以防止缓存占用过多内存。 2. **磁盘持久化**:当内存中的缓存达到其...
本文将深入探讨EHCache的配置及其主要元素,帮助开发者更好地理解和使用EHCache。 首先,EHCache的配置文件通常命名为`ehcache.xml`,但也可以根据需求自定义。配置文件包含了对缓存行为的详细设定,这些设定主要由...
在分布式环境中,Ehcache使用Terracotta服务器进行集群管理,确保缓存的一致性和高可用性。 Terracotta服务器通过TCP/IP协议协调各个节点,确保数据同步,并提供故障转移功能,当某个节点出现问题时,其他节点可以...
下面是一些基础的Ehcache使用示例: ```java // 创建CacheManager实例 CacheManager cacheManager = CacheManager.create(); // 或者通过指定配置文件路径创建 cacheManager = CacheManager.create("/config/...
1. 高性能:Ehcache使用内存作为主要存储,访问速度快。 2. 可配置性:可以设置缓存策略,如大小限制、过期时间等。 3. 分布式:通过Terracotta服务器,Ehcache支持多节点的分布式缓存。 二、Ehcache与Spring整合 ...
- **TestEhcache.zip**:这个项目可能是一个简单的Ehcache使用示例,演示了如何创建和操作缓存,包括缓存的存取、更新、删除等基本操作。通过阅读源代码和运行程序,可以直观地理解Ehcache的基本功能。 - **...
1. **内存管理**:Ehcache使用内存存储来快速访问常用数据,以减少对持久存储(如数据库)的依赖。它通过分区和缓存策略(如LRU、LFU)来管理内存中的对象,确保高效使用有限的内存资源。 2. **分布式缓存**:...