1.导入jar包(pom.xml文件)
<!-- ehcache缓存框架 --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> </dependency>
Spring 整合 ehcache 包 spring-context-support 包
2.使用 ehcache ,导入 ehcache.xml 配置文件
解压 ehcache-core.jar 包 ,将 ehcache-failsafe.xml 复制 src/main/resources
改名 ehcache.xml
ehcache.xml文件
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <diskStore path="java.io.tmpdir"/> <!-- 默认缓存区 --> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </defaultCache> <!-- 自定义缓存区 --> <cache name="bos" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </cache> <!-- 自定义缓存区 --> <cache name="standard" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/> </cache> </ehcache>name
diskStore |
指定数据存储位置,可指定磁盘中的文件夹位置 |
defaultCache |
默认的管理策略 |
name |
Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里) |
maxElementsInMemory |
在内存中缓存的element的最大数目 如果放入cache中的元素超过这个数值,有两种情况: 1、若overflowToDisk的属性值为true,会将cache中多出的元素放入磁盘文件中。 2、若overflowToDisk的属性值为false,会根据memoryStoreEvictionPolicy的策略替换cache中原有的元素。 |
eternal |
设定缓存的elements是否永远不过期。 |
overflowToDisk |
如果内存中数据超过内存限制,是否要缓存到磁盘上。 |
maxElementsOnDisk |
在磁盘上缓存的element的最大数目,默认值为0,表示不限制。 |
timeToIdleSeconds |
对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。以秒为单位。 |
timeToLiveSeconds | 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。以秒为单位。 |
diskPersistent | 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。 |
diskExpiryThreadIntervalSeconds |
对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。以秒为单位。 |
iskSpoolBufferSizeMB |
DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。 |
memoryStoreEvictionPolicy |
如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。 缓存的3 种清空策略 : FIFO ,first in first out (先进先出). LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。 LRU ,Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。 |
3.applicationContext-ehcache.xml文件
<?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:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd "> <!-- 缓存配置 --> <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml" /> </bean> <!-- shiro封装cacheManager --> <bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <property name="cacheManager" ref="ehCacheManager" /> </bean> <!-- spring 封装ehcache缓存管理器 --> <bean id="springCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> <property name="cacheManager" ref="ehCacheManager" /> </bean> <!-- 激活spring 缓存注解 --> <cache:annotation-driven cache-manager="springCacheManager"/> </beans>
加载该配置文件
4.修改web.xml文件
<!-- spring配置文件位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
5.将cache管理器注入到安全管理器中
6.对认证数据、授权数据 哪些进行缓存 ?
对应到ehcache.xml文件中的自定义的缓存缓存区
注意: 使需要缓存对象,实现 Serializable 接口
使用注解进行开发
第七步: 在被 spring 管理 bean 对象方法上 使用@Cacheable 、@CacheEvict
@Cacheable 应用缓存区,对方法返回结果进行缓存 ---- 用于查询方法
@CacheEvict 清除缓存区数据 --- 用于 增加、修改、删除 方法