caching - Grails - 如何以 grails.gorm.DetachedCriteria 作为参数缓存服务方法?

标签 caching grails service

我有一个如下所示的服务方法,它使用 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/

    相关文章:

    Magento 1.13 FPC 缓存未失效

    list - 如何将 Controller 操作返回的列表中的每个值打印到gsp表的每一行中?

    android - 从后台服务中使用相机

    service - DDD : Blocking External Service Calls and Events

    performance - 你如何处理登录/注销的浏览器缓存?

    ruby-on-rails - 为什么我的 Rails erb 页面没有显示更改?

    eclipse : Errors occurred during the build Groovy/Grail Project

    java - 理解Java自动加载Jdbc驱动的Service Provider机制

    c# - 缓存数据记录器数据的方法

    grails - 使用Spring Security在不重新编码所有密码的情况下为实时Grails应用程序增加BCrypt logrounds是否安全?