【发布时间】:2018-07-18 03:28:09
【问题描述】:
我的服务有时需要缓存数据,有时有时不需要,所以我想写一个可以在不需要时清除缓存的方法,并且#可以有人帮我创建一个安静的 java 8 spring boot#
【问题讨论】:
标签: java spring spring-boot java-8 clear-cache
我的服务有时需要缓存数据,有时有时不需要,所以我想写一个可以在不需要时清除缓存的方法,并且#可以有人帮我创建一个安静的 java 8 spring boot#
【问题讨论】:
标签: java spring spring-boot java-8 clear-cache
Spring 提供了可以帮助您实现此目的的注释。如果有条件需要缓存,例如可以使用@Cacheable 注释的condition 参数,例如:
@Cacheable(cacheNames="stuff", condition="#cached")
public List<Stuff> findAll(boolean cached) {
// ...
}
在这种情况下,如果你调用findAll(true),它会返回缓存的结果,而如果你调用findAll(false),它会表现得好像没有注解一样。
从中创建 REST API 并不难,因为您的 cached 参数也可能来自请求参数:
@GetMapping("/api/stuff")
@Cacheable(cacheNames="stuff", condition="#cached")
public List<Stuff> findAll(@RequestParam boolean cached) {
// ...
}
另外,如果要清除缓存,可以使用@CacheEvict注解:
@CacheEvict("stuff")
public void clearCache() {
}
和以前一样,你可以把它变成一个端点:
@DeleteMapping("/api/stuff/cache")
@CacheEvict("stuff")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void clearCache() {
}
【讨论】:
@CacheEvict 为你清除缓存,所以基本上你不需要任何代码。