改写@Cacheable的业务逻辑,实现findById方法
时间: 2024-09-07 20:04:35 浏览: 38
在Spring框架中,使用`@Cacheable`注解可以方便地将方法的结果存储到缓存中,提高性能。如果你想基于`@Cacheable`的逻辑改写`findById`方法,通常会在Service层处理缓存操作。下面是一个简单的例子:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;
@Service
public class CommentService {
private final CommentRepository commentRepository;
private final CacheManager cacheManager;
@Autowired
public CommentService(CommentRepository commentRepository, CacheManager cacheManager) {
this.commentRepository = commentRepository;
this.cacheManager = cacheManager;
}
@Cacheable(value = "comments", key = "#id", unless = "#result == null")
public Comment findById(int id) {
// 从缓存获取,如果存在直接返回
Object cachedComment = cacheManager.getCache("comments").getIfPresent(String.valueOf(id));
if (cachedComment != null && cachedComment instanceof Comment) {
return (Comment) cachedComment;
}
// 缓存未找到,或者缓存中的值不是Comment类型,从数据库查询
Comment comment = commentRepository.findById(id).orElse(null);
// 存入缓存,如果查询到了数据
if (comment != null) {
cacheManager.getCache("comments").put(String.valueOf(id), comment);
}
return comment;
}
// 当需要从缓存中移除特定ID的评论时
public void removeFromCacheById(int id) {
cacheManager.getCache("comments").remove(String.valueOf(id));
}
}
```
在这个例子中,我们在`CommentService`中定义了一个`findById`方法,它首先尝试从缓存获取指定ID的评论,如果缓存命中,则直接返回;否则,查询数据库并把查询结果存入缓存。
需要注意的是,实际应用中可能还需要配合`@EnableCaching`和`@Configuration`等配置来启动缓存管理。
阅读全文