因项目需求 ,有部分变量,需要频繁获取,放到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