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 秒待つ必要があります。彼がページに戻った場合、キャッシュが使用されますが、カウントを1回だけ実行してから、キャッシュからカウントをフェッチしたいと思います。
どうやってやるの?