在单个方法上调用@CacheEvict和@Cacheable注释?

时间:2016-04-26 09:32:06

标签: spring-cache spring-data-redis

我正在尝试在单个方法上调用@CacheEvict和@Cacheable注释。

@CacheEvict(value = "tripDetailsDashboardCache", key = "#userId")
@Cacheable(value ="tripDetailsDashboardCache", key="#userId")
public  List<DashBoardObject> getAllDetailsForDashBoard(Integer userId){
    List<Master> masters = tripDetailsService.getTripDetailsForCaching(userId);
    List<DashBoardObject> dashBoardObject = tripDetailsService.getMasterDetailsForDashBoard(userId, masters);
    return dashBoardObject;
}

在调用@CacheEvict时,我想删除特定键的缓存数据,并且我想再次缓存方法响应的新数据。但它没有缓存新数据?而且它没有给出任何错误?。

3 个答案:

答案 0 :(得分:2)

我认为你想要更新缓存,所以尽量使用@CachePut,方法会在所有情况下执行,如果密钥是新的,新的记录将被添加到缓存中,如果记录是旧的,旧的值将按新值更新(刷新值)。

@CachePut(value = "tripDetailsDashboardCache", key = "#userId")
public  List<DashBoardObject> getAllDetailsForDashBoard(Integer userId){
    List<Master> masters = tripDetailsService.getTripDetailsForCaching(userId);
    List<DashBoardObject> dashBoardObject = tripDetailsService.getMasterDetailsForDashBoard(userId, masters);
    return dashBoardObject;
}

答案 1 :(得分:0)

@CacheEvict在方法调用后默认运行。因此,上面的方法使用键#userId缓存列表,然后完全清除缓存。

它使代码不清楚我建议创建单独的可缓存和缓存驱逐方法

答案 2 :(得分:0)

看看docs。有@Caching注释,您可以在其中定义@Cacheable,@ CachePut和@CacheEvict