我使用spring cache abstraction来缓存服务层中的对象.这适用于简单的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) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,我将使用什么注释用于以下方法:
public long countAllMessages() {
...
}
Run Code Online (Sandbox Code Playgroud)
由于所有对象都在缓存中,因此应该有一种方法可以从缓存中获取答案,而不必转到存储库层.
此外,缓存正在应用于以下方法:
@Cacheable(cacheName)
public List<Message> findAllMessages() {
...
}
Run Code Online (Sandbox Code Playgroud)
我可以使count方法调用find all方法,如下所示:
public long countAllMessages() {
return findAllMessages().size();
}
Run Code Online (Sandbox Code Playgroud)
但是在禁用缓存的情况下这不会有效,因为调用会从db加载所有记录而不是执行SELECT COUNT(*)...