集成caffeineCache缓存功能
@Cacheable:缓存数据,一般用在查询方法上。将查询到的数据进行缓存
@CachePut:更新方法上,将数据从缓存中更新
@CacheEvict:删除缓存
2、pom文件引入相关jar包
3、CacheManager Bean
4、使用注解,标识我们的方法,哪些需要缓存
这里集成的是caffeineCache框架,也可以换成redis等等其他框架。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
@Configuration
@EnableCaching
@Slf4j
public class CaffeineCacheConfig {
/**
* CacheManager实现。
* @return
*/
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager=new SimpleCacheManager();
ArrayList<CaffeineCache> caches=new ArrayList<CaffeineCache>();
caches.add(new CaffeineCache("users-cache", Caffeine.newBuilder()
// 指定key下的最大缓存数据量
.maximumSize(1000)
// 最后一次访问后 120秒 过期
.expireAfterAccess(120, TimeUnit.SECONDS)
.build()));
cacheManager.setCaches(caches);
return cacheManager;
}
}
@Cacheable(cacheNames = "users-cache")
@GetMapping
public ResponseResult<PageResult> query(Integer pageNo,Integer pageSize,UserQueryDTO query) {
log.info("未使用缓存");
PageQuery pageQuery=new PageQuery<UserDTO>();
pageQuery.setPageNo(pageNo);
pageQuery.setPageSize(pageSize);
pageQuery.setQuery(query);
PageResult<List<UserDTO>> pageResult=userService.query(pageQuery);
List<UserVO> userVOList=Optional.ofNullable(pageResult.getData())
.map(List::stream)
.orElseGet(Stream::empty)
.map(userDTO-> {
UserVO userVO=new UserVO();
BeanUtils.copyProperties(userDTO, userVO);
userVO.setPassword("****");
return userVO;
})
.collect(Collectors.toList());
PageResult<List<UserVO>> result=new PageResult<List<UserVO>>();
BeanUtils.copyProperties(pageResult, result);
result.setData(userVOList);
return ResponseResult.success(result);
}
使用@Cacheable就能缓存数据了。如果数据更新了需要使用@CachePut,@CacheEvict 来对缓存进行更新。
caffeineCache是本地缓存,不支持分布式。
网友评论