第一次使用Redis时(为了缓存),我使用该高速缓存来获取所有值并更新它们,但删除时除外,因为我希望允许用户一次删除多个值,而不是一次删除一个值(用户可以选择多个记录,然后删除所有这些记录,或者如果选择了一个值,则只删除该值)
现在,当我删除一条Single记录时,当我检查时,它将该高速缓存中删除,但是当我尝试删除多条记录时,这些值仍然保留在缓存中。
删除终结点
// In the request, a list of Ids can be passed or even just a single Id, and then those records will be deleted appropriately
@CacheEvict(value="Post", key="#postId")
@DeleteMapping("/posts/{postId}")
public ResponseEntity<?> deletePosts(@PathVariable List<Long> postId, Principal principal) {
postService.deleteMultiplePosts(postId, principal.getName());
// When a record is deleted, just return all the remaining records as a response
return new ResponseEntity<>(createMapForPageContents(postService.findAllActivePostsByPostCreator(principal.getName(), PageRequest.of(0, 5))), HttpStatus.OK);
}
服务方式
public void deleteMultiplePosts(List<Long> postIdList, String emailAddress) {
List<Post> posts = new ArrayList<>();
for (int i = 0; i < postIdList.size(); i++) {
posts.add(findPostById(postIdList.get(i), emailAddress));
}
postRepository.deleteAll(posts);
}
删除操作有效并反映在MySQL中,但不反映该高速缓存中(仅当尝试从缓存中删除多个值时,而不是一个值)
我在用 Postman 测试请求
1条答案
按热度按时间dced5bon1#
您应该在
@CacheEvict(value="Post", key="#postId")
中添加allEntries = false
,这样您应该