java - 我的 api 有时有时需要缓存数据,有时不需要?
问题描述
我的服务有时需要缓存数据,有时有时不需要,所以我想编写一个方法,可以在不需要时清除缓存并且#可以有人帮我创建一个宁静的 java 8 spring boot#
解决方案
Spring 提供了可以帮助您实现此目的的注释。如果您有条件地需要缓存,例如可以使用注解的condition
参数@Cacheable
,例如:
@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() {
}
推荐阅读
- c# - 如何管理具有位置的列表中的项目
- anylogic - 在 Seize 块中配置嵌入式队列
- javascript - 限制 contenteditable 元素删除最后一个子节点
- javascript - D3/Angular 中的大型力有向图数据集
- c# - 如何更快地二值化图片
- html - SVG Favicon 不会在 React 中调整大小
- vb.net - 带有 VB .NET 的 websocket 服务器
- java - 如果 void 方法在调用时正确输出字符串,是否可以测试(JUnit)?
- php - Action App\Http\Controllers\KategoriController@store 未定义
- cross-compiling - Yocto 交叉编译,bitbake glibc 错误:bison