我正在使用的缓存 Ehcache3
作为提供者。假设我有这样的方法:
@Transactional
@Cacheable(cacheNames = "findAllPosts")
public Page<Post> getAllPosts(Pageable pageable) {
return postRepository.findAll(pageable);
}
@Transactional
@Cacheable(cacheNames = "findPostById")
public Post findById(Long id) {
return postRepository.findById(id).orElseThrow(exceptionHelper.getEntityNotFoundException(id, Post.class));
}
@Transactional
@CachePut(cacheNames = "findPostById", key = "#result.id")
public Post update(Long postId, Post postToUpdate) {
Post post = postRepository.getOne(postId);
post.setTitle(postToUpdate.getTitle());
post.setContent(postToUpdate.getContent());
post.setUpdated(LocalDateTime.now());
return post;
}
我当然想缓存这个方法。它起作用了,但是 @CachePut
只影响 findPostById
不影响 findAllPosts
即使我加上 findAllPosts
去缓存名字。当我更新文章时,它对单个文章(按id)是可见的,而不是对 getAllPosts
(此方法的缓存未更新)。如何不仅更新单个实体,而且更新整个集合?有什么类似的吗 @CollectionCache
?
1条答案
按热度按时间ifmq2ha21#
解决这个问题的一个方法是,每当更新一个元素时,就逐出列表的缓存。
您必须自动连接cachemanager,从那里访问缓存,并在update方法中手动收回所需内容。
示例代码:
当然,您需要用您的值替换“cachename”和“cachekey”。