0

我试图在一个方法上调用 @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 时,我想删除特定键的缓存数据,并且我想再次缓存方法响应的新数据。但它没有缓存新数据?而且它没有给出任何错误?

4

3 回答 3

3

我想你想更新缓存,所以尝试使用@CachePut,方法在所有情况下都会执行,如果key是新的,新的记录会被添加到缓存中,如果记录是旧的,旧的值会被更新按新值(刷新值)。

@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;
}
于 2016-06-18T01:40:09.640 回答
0

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

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

于 2016-04-26T09:49:03.203 回答
0

查看文档。有@Caching 注释,您可以在其中定义您的@Cacheable、@CachePut 和@CacheEvict

于 2017-05-11T11:17:22.630 回答