我应该在Spring MVC Web应用程序中对DAO层或服务层进行缓存吗?

use*_*736 10 java caching spring-mvc

我想在我的Spring MVC Web应用程序中缓存数据.因为我也是Spring Framework和MVC架构的新手,我想问一下我是否应该在DAO层上缓存数据(通过Spring Caching系统),还是应该在服务层上缓存输出方法?

例如,我在服务层上有这个方法:

@Override
public LinkedList<OrderCount> getOrderCount(Date dateFrom, Date dateTo, Class type) {
    try {
        return chartDataDAO.getOrderCount(dateFrom, dateTo, type);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个方法调用这个DAO方法:

public LinkedList<OrderCount> getOrderCount(Date dateFrom, Date dateTo, Class type);
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该在服务或DAO层上进行缓存吗?

SJu*_*n76 7

首先,不要先行.在缓存之前,请确保您需要它.缓存可以提高性能,但会引发一系列令人头疼的问题(主要是由于丢失数据一致性).

其次,如果你做缓存,可能的时候使用第三方框架,比如EHCache等(是的,那就是数据层)

第三,在您的示例中,您的方法签名使我认为您不太可能多次获得相同的请求.getOrderCount(January 27, January 28, String)当您收到请求时,存储答案对您没有帮助getOrderCount(March 21, March 28, Vector).除非有一些值,因为你的业务逻辑很可能被要求很多,并且计算结果足够重,否则缓存(如果有的话)应该进入数据层.