我有一个如下所示的服务方法,它使用 grails.gorm.DetachedCriteria
作为它的参数。由于此方法被频繁调用,因此我想缓存此方法。但在这种情况下,每次调用该方法时,我都会对 db 产生影响。我使用 grails“缓存插件”
@Cacheable("totalCountCache")
public int count(DetachedCriteria detachedCriteria) throws Exception {
return detachedCriteria.count();
}
最佳答案
如果您不指定 key ,则将使用以下默认 key 生成策略:
public Object generate(Object target, Method method, Object… params) {
if (params.length == 1) {
return (params[0] == null ? 53 : params[0]);
}
if (params.length == 0) { return 0; }
int hashCode = 17;
for (Object object : params) {
hashCode = 31 * hashCode + (object == null ? 53 : object.hashCode());
}
return hashCode;
}
由于您的方法只有一个参数,
detachedCriteria
本身将被用作键,因此如果出现以下情况,缓存将被遗漏:detachedCriteria
调用此方法对象(以前没有遇到过的)detachedCriteria
调用这个方法之前遇到过,但为此对象缓存的值已过期如果这个 key 生成策略不合适,你可以通过定义一个名为
webCacheKeyGenerator
的 spring bean 来覆盖它。实现 grails.plugin.cache.web.filter.WebKeyGenerator
接口(interface)(你可以继承DefaultWebKeyGenerator
来简化实现这个接口(interface))。
关于caching - Grails - 如何以 grails.gorm.DetachedCriteria 作为参数缓存服务方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057962/