因项目需求 ,有部分变量,需要频繁获取,放到redis中也不太适合,所以采用了本地缓存的方式存储到本地。因本人水平有限,不深究具体实现原理,只搬上实现代码。
1.修改pom文件,新增依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
2.配置yum文件,SpringBoot通过spring.cache为前缀来配置缓存
spring:
cache:
type: guava
#缓存名称
cache-names: guavaDemo
#缓存最大数量500条, 缓存失效时间 6个小时
guava.spec: maximumSize=500,expireAfterWrite=360m
3.具体实现
@Component
public class CacheUtil {
/**
* 初始化,非必要
*/
@PostConstruct
public void init() {
dataMap.put(1L, "张三");
dataMap.put(2L, "李四");
dataMap.put(3L, "王五");
}
/**
* 查询 如果数据没有缓存,那么从dataMap里面获取,如果缓存了, 那么从guavaDemo里面获取 并且将缓存的数据存入到
* guavaDemo里面 其中key 为 #id+dataMap,方法体里面写具体取值的方法,如果有缓存,不会去请求,直接缓存中拿
*/
@Cacheable(value = "guavaDemo", key = "#id + 'dataMap'")
public String query(Long id) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()) + " : query id is " + id);
return dataMap.get(id);
}
/**
* 插入 或者更新 插入或更新数据到dataMap中 并且缓存到 guavaDemo中 如果存在了那么更新缓存中的值 其中key 为
* #id+dataMap
*/
@CachePut(value = "guavaDemo", key = "#id + 'dataMap'")
public String put(Long id, String value) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()) + " : add data ,id is " + id);
dataMap.put(id, value);
// data persistence
return value;
}
/**
* 删除 删除dataMap里面的数据 并且删除缓存guavaDemo中的数据 其中key 为 #id+dataMap
*/
@CacheEvict(value = "guavaDemo", key = "#id + 'dataMap'")
public void remove(Long id) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()) + " : remove id is " + id
+ " data");
dataMap.remove(id);
// data remove
}
4.springboot启动类里新增注解
@EnableCaching