在整合之前需要做相关的准备
- 在pom.xml中添加ehcache的相关依赖包。
- 在spring的配置文件中添加ehcache的配置。
- 准备一份ehcache.xml文件,配置缓存的策略。
- 在代码层面上使用spring提供的注解进行具体实现。
根据以上的说明下面开始将ehcache整合到spring中。
- 在pom.xml中添加依赖
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.9.0</version>
</dependency>
- 在spring.xml中配置ehcache
<bean id="ehcacheManagerBean" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml"/>
<property name="shared" value="true"/>
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcacheManagerBean"/>
<property name="transactionAware" value="true"/>
</bean>
- 创建ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache updateCheck="false">
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
/>
</ehcache>
缓存配置
name | 缓存名称。 |
maxElementsInMemory | 缓存最大个数。 |
eternal | 对象是否永久有效,一但设置了,timeout将不起作用。 |
timeToIdleSeconds | 设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 |
timeToLiveSeconds | 设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。 |
overflowToDisk | 当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。 |
diskSpoolBufferSizeMB | 这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 |
maxElementsOnDisk | 硬盘最大缓存个数。 |
diskPersistent | 是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false. |
diskExpiryThreadIntervalSeconds | 磁盘失效线程运行时间间隔,默认是120秒。 |
memoryStoreEvictionPolicy | 当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。 |
clearOnFlush | 内存数量最大时是否清除。 |
- 在Service层的接口实现类的方法上使用spring提供的注解实现
spring 提供的cache注解有以下几个:
@Cacheable @CacheEvict @CachePut
@Cacheable(value=”usersCache”)这个注释的意思是,当调用这个方法的时候,会从一个名叫 usersCache的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的 key 就是参数 userName,value 就是 Account 对象。“usersCache”缓存是在 ehcache.xml 中定义的名称。
@CacheEvict 注释来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存。注意其中一个 @CacheEvict(value=”accountCache”,key=”#account.getName()”),其中的 Key 是用来指定缓存的 key 的,这里因为我们保存的时候用的是 account 对象的 name 字段,所以这里还需要从参数 account 对象中获取 name 的值来作为 key,前面的 # 号代表这是一个 SpEL 表达式,此表达式可以遍历方法的参数对象,具体语法可以参考 Spring 的相关文档手册。
@CachePut 的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实方法的调用