Я пытаюсь реализовать кэширование Spring в сервисе Spring Boot RESTful. Это кеширующий код для методов getAllBlogs () и getBlogById ().
@Cacheable(value="allblogcache")
@Override
public List<Blog> getAllBlogs() {
System.out.println("******* "+ blogRepository.findAll().toString());
return (List<Blog>) blogRepository.findAll();
}
@Cacheable(value="blogcache", key = "#blogId")
@Override
public Blog getBlogById(int blogId) {
Blog retrievedBlog = null;
retrievedBlog = blogRepository.findById(blogId).get();
return retrievedBlog;
}
В методе saveBlog я хочу удалить кэш и использовал следующий код.
@Caching(evict = {
@CacheEvict(value="allblogcache"),
@CacheEvict(value="blogcache", key = "#blog.blogId")
})
@Override
public Blog saveBlog(Blog blog) {
return blogRepository.save(blog);
}
При запуске я сделал следующее с помощью Почтальона:
- Сохранены два блога. Оба блога сохраняются в базе данных.
- называется get Все блоги. Оба сохраненных блога возвращаются.
- Сохранен новый блог. Здесь я предполагаю, что кеш был удален.
- Я позвонил, чтобы получить все блоги. Однако возвращаются только два блога. Это означает, что блоги возвращаются из старого кэша. Это не было выселено при вызове третьего сохранения.
Репозиторий Github находится в https://github.com/ximanta/spring-cache