我正在使用 spring 缓存抽象来缓存服务层中的对象。这适用于简单的 get/put 操作,如下所示:
static private final String cacheName = "messages";
@CacheEvict(value=cacheName, key="#message.id")
public void deleteMessage(Message message) {
...
}
@Cacheable(value=cacheName, key="#id")
public Message findMessage(Long id) {
...
}
@CachePut(value=cacheName, key="#message.id")
public void saveMessage(Message message) {
...
}
@CachePut(value=cacheName, key="#message.id")
public Message updateMessage(Message message) {
...
}
但是,我将为以下方法使用什么注释:
public long countAllMessages() {
...
}
由于所有对象都将在缓存中,因此应该有一种方法可以从缓存中获取答案,而不必去存储库层。
此外,缓存正在应用于以下方法:
@Cacheable(cacheName)
public List<Message> findAllMessages() {
...
}
我可以让 count 方法调用 find all 方法,如下所示:
public long countAllMessages() {
return findAllMessages().size();
}
但这在禁用缓存的情况下效率不高,因为调用会从数据库加载所有记录,而不是执行 SELECT COUNT(*)...