9

我正在使用 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(*)...

4

1 回答 1

16
于 2012-12-26T06:20:25.530 回答