1、
Application.java中增加注解
//增加ehcache缓存
@EnableCaching
public class Application {
2、配置文件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="java.io.tmpdir/Tmp_EhCache"/>
<!-- 默认缓存 -->
<defaultCache
eternal="false"
maxElementsInMemory="10000"
overflowToDisk="false"
diskPersistent="false"
timeToIdleSeconds="1800"
timeToLiveSeconds="259200"
memoryStoreEvictionPolicy="LRU"/>
<!-- helloworld缓存 -->
<cache name="cacheTestBean"
maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="50000"
timeToLiveSeconds="50000"
overflowToDisk="true"
memoryStoreEvictionPolicy="LRU"/>
<!--ehcache.xml配置参数说明:
name:缓存名称。
maxElementsInMemory:缓存最大个数。
eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
timeToIdleSeconds:置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds:缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。
maxEntriesLocalDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
overflowToDisk:内存不足时,是否启用磁盘缓存。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
maxElementsOnDisk:硬盘最大缓存个数。
diskPersistent:是否在VM重启时存储硬盘的缓存数据。默认值是false。
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
clearOnFlush:内存数量最大时是否清除。-->
</ehcache>
3、service调用
package com.unidt.norter.serviceImpl.normal;
import com.qcloud.cos.utils.StringUtils;
import com.unidt.norter.bean.UserInfo;
import com.unidt.norter.bean.testcache.CacheTestBean;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @Description: 缓存测试服务
* @author songchun.yang
* @Description:
* @Date Created in 2020/4/1 16:36
*/
@Service
@CacheConfig(cacheNames="cacheTestBean")
public class CacheTestService {
/**模拟数据库进行存储**/
public Map<String, CacheTestBean> list = new HashMap<String,CacheTestBean>();
@Cacheable(key="#bean.getKey()")
public CacheTestBean save(CacheTestBean bean) {
System.out.println("save()被执行了....");
return bean;
}
/**
*@Description: 添加到map
*@Author: ysc 2020/4/1 16:36
*/
@CachePut(value = "cacheTestBean", key="#cacheTestBean.key",condition = "#cacheTestBean.name != null ")
public CacheTestBean add(CacheTestBean cacheTestBean){
if(null!=cacheTestBean
&&!StringUtils.isNullOrEmpty(cacheTestBean.getKey())
&&!list.containsKey(cacheTestBean.getKey())){
/**设置创建时间**/
cacheTestBean.setCreatTime(new Date());
System.out.println("添加到内存:"+cacheTestBean);
return list.put(cacheTestBean.getKey(),cacheTestBean);
}
return new CacheTestBean();
}
/**
*@Description: 获取map
*@Author: ysc 2020/4/1 16:36
*/
@Cacheable(value = "cacheTestBean",key="#key", condition = "#key != null ")
public CacheTestBean get(String key){
String a = "wqw";
CacheTestBean current=list.get(key);
/**设置更新时间**/
if(current!=null){
current.setUpdateTime(new Date());
list.put(key,current);
System.out.println("读取内存:"+current);
}else{
System.out.println("内存中不存在:"+current);
}
return current;
/* if(!StringUtils.isNullOrEmpty(key)&&list.containsKey(key)){
CacheTestBean current=list.get(key);
*//**设置更新时间**//*
current.setUpdateTime(new Date());
list.put(key,current);
System.out.println("读取内存:"+current);
return current;
}*/
// return new CacheTestBean();
}
/**
*@Description: 删除map
*@Author: ysc 2020/4/1 16:36
*/
@CacheEvict(value = "cacheTestBean",key="#key",condition = "#key != null ")
public CacheTestBean del(String key){
if(!StringUtils.isNullOrEmpty(key)&&list.containsKey(key)){
System.out.println("删除内存:"+key);
return list.remove(key);
}
return new CacheTestBean();
}
}
4、调用测试类
package com.unidt.norter.bean.testcache;
import java.io.Serializable;
import java.util.Date;
/**
*
* @Description: 缓存测试实体
* @author songchun.yang
* @Description:
* @Date Created in 2020/4/1 16:37
*/
public class CacheTestBean implements Serializable{
/**键**/
String key;
/**值**/
String name;
/**创建时间**/
Date creatTime;
/**更新时间**/
Date updateTime;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreatTime() {
return creatTime;
}
public void setCreatTime(Date creatTime) {
this.creatTime = creatTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "CacheTestBean{" +
"key='" + key + '\'' +
", name='" + name + '\'' +
", creatTime=" + creatTime +
", updateTime=" + updateTime +
'}';
}
}
5、缓存路由
package com.unidt.api;
import com.unidt.norter.bean.testcache.CacheTestBean;
import com.unidt.norter.serviceImpl.normal.CacheTestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author songchun.yang
* @Description:
* @Date Created in 2020/4/1 17:09
*/
@RestController
@RequestMapping("/Cache")
public class CacheTestController {
@Autowired
CacheTestService cacheTestService;
/**
*@Description: 测试缓存
*@param cacheTestBean
*@return com.zyj.bean.CacheTestBean
*@Author: zyj 2018/5/26 22:47
*/
@RequestMapping("/add")
public CacheTestBean testAdd(CacheTestBean cacheTestBean){
return cacheTestService.add(cacheTestBean);
}
/**
*@Description: 测试获取缓存
*@param key
*@return com.zyj.bean.CacheTestBean
*@Author: zyj 2018/5/26 22:47
*/
@RequestMapping("/get")
public CacheTestBean testGet(String key){
CacheTestBean current=cacheTestService.get(key);
System.out.println("获得数据"+current);
return current;
}
/**
*@Description: 测试删除缓存
*@param key
*@return com.zyj.bean.CacheTestBean
*@Author: zyj 2018/5/26 22:47
*/
@RequestMapping("/del")
public CacheTestBean testDel(String key){
return cacheTestService.del(key);
}
}