1

以下に示すように、grails.gorm.DetachedCriteriaパラメーターとして使用するサービスメソッドがあります。このメソッドは頻繁に呼び出されるので、このメソッドをキャッシュしたい。しかし、この場合、メソッドが呼び出されるたびに、db にヒットします。私はgrailsの「キャッシュプラグイン」を使用しています

@Cacheable("totalCountCache")
public int count(DetachedCriteria detachedCriteria) throws Exception {
    return detachedCriteria.count();
}
4

2 に答える 2

0

この質問の焦点は、関数のパラメーターに向けるべきDetachedCriteriaです。(私の知る限り)DetachedCriteriaキーとして使用する方法はありません。

幸いなことに、別のオブジェクト 'UserCriteria' (これは私が作成したカスタム オブジェクトです) を作成するために使用しましDetachedCriteriaた。そのため、「UserCriteria」オブジェクトをパラメーターとして受け入れるようにメソッドを更新しました。下に示された

@Cacheable(value='userTotalCountCache', key='#userCriteria.toString()')
public int count(UserCriteria userCriteria) throws Exception {
    DetachedCriteria detachedCriteria = getDetachedCriteria(userCriteria);
    return detachedCriteria.count();
}

そして、それはうまくいきました。

UserCriteriaPS:これが機能するためには、ここでキーとして使用されているため、の toString() をオーバーライドする必要がありました。

于 2013-06-17T08:43:57.113 に答える