我正在使用带有 querydsl 的 spring data jpa。我有一种方法可以在包含总计数的页面中返回查询结果。获取总数很昂贵,我想缓存它。这怎么可能?
我幼稚的做法
@Cacheable("queryCount")
private long getCount(JPAQuery query){
return query.count();
}
不起作用(为了使其起作用,他们希望缓存的实际键不应该是整个查询,而只是条件)。无论如何测试它,没有工作,然后我发现这个:Spring 3.1 @Cacheable - 方法仍然执行
我理解这一点的方式我只能缓存公共接口方法。但是在所述方法中,我需要缓存返回值的属性,例如。
Page<T> findByComplexProperty(...)
我需要缓存
page.getTotalElements();
注释整个方法有效(它被缓存)但不是我想要的方式。假设获取总数需要 30 秒。因此,对于每个新页面请求,用户需要等待 30 秒。如果他返回一个页面,则使用缓存,但我希望计数只运行一次,然后从缓存中获取计数。
我怎样才能做到这一点?