易采站长站为您分析springboot整合GuavaCache缓存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Guava Cache是一种本地缓存机制,之所以叫本地缓存,是因为它不会把缓存数据放到外部文件或者其他服务器上,而是存放到了应用内存中。
Guava Cache的优点是:简单、强大、轻量级。
GuavaCache适用场景:
1.某些接口或者键值会被查询多次以上;
2.愿意使用或牺牲一些内存空间来提升访问或者计算速度;
3.缓存内容或者结果值较小,不会超过内存总容量;
GuavaCache中基于注解的声明式缓存操作
@Cacheable 触发缓存逻辑
Spring 在执行 @Cacheable 标注的方法前先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,执行该方法并将方法返回值放进缓存。
参数: value缓存名、 key缓存键值、 condition满足缓存条件、unless否决缓存条件
@CacheEvict
触发缓存逐出逻辑
方法执行成功后会从缓存中移除相应数据。
参数: value缓存名、 key缓存键值、 condition满足缓存条件、 unless否决缓存条件、 allEntries是否移除所有数据 (设置为true时会移除所有缓存)
@CachePut
和 @Cacheable 类似,但会把方法的返回值放入缓存中, 主要用于数据新增和修改方法。
pom.xml配置文件:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> <version>1.5.9.RELEASE</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency>
GuavaCacheConfig:
/**
* Copyright (c) 2020, All Rights Reserved.
*
*/
package com.demo.server.config;
import java.util.concurrent.TimeUnit;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.guava.GuavaCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.google.common.cache.CacheBuilder;
@Configuration
@EnableCaching
public class GuavaCacheConfig {
@Bean
public CacheManager cacheManager() {
GuavaCacheManager cacheManager = new GuavaCacheManager();
cacheManager.setCacheBuilder(
CacheBuilder.newBuilder().
expireAfterWrite(10, TimeUnit.SECONDS). //存活时间10秒
maximumSize(1000)); //最大线程数
return cacheManager;
}
}
CacheController:
/**
* Copyright (c) 2020, All Rights Reserved.
*
*/
package com.demo.server.guava;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/guava")
public class CacheController {
@Autowired
private CacheService cacheService;
/**
* 查询方法
*/
@RequestMapping(value = "/get", method = RequestMethod.GET)
public String getByCache() {
Long startTime = System.currentTimeMillis();
long timestamp = this.cacheService.getByCache();
Long endTime = System.currentTimeMillis();
System.out.println("耗时: " + (endTime - startTime));
return timestamp+"";
}
/**
* 保存方法
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public void save() {
this.cacheService.save();
}
/**
* 删除方法
*/
@RequestMapping(value = "delete", method = RequestMethod.DELETE)
public void delete() {
this.cacheService.delete();
}
}










