本地缓存guava的使用,springboot集成guava

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

猜你喜欢

转载自blog.csdn.net/the_knife/article/details/80238286