【问题标题】:Grails: examples of good use of .memoize()?Grails:.memoize() 的良好使用示例?
【发布时间】:2012-03-16 00:24:26
【问题描述】:

记忆一个无副作用且只进行查找的服务方法的语法是什么?备忘录会从一个会话持续到另一个会话,还是在网络世界中是没有目的的?有没有一些在 grails 应用程序中使用 .memoize() 的好地方的例子?

class DetermineStuffService{
  def figureThisOut(def whatever){
    //look up all sorts of stuff and do some heavy side-effect free processing
    return nastyHashmap
  }
}

那么在控制器中我可以以某种方式调用DetermineStuffService.figureThisOut(someRandomObject) 并利用.memoize() 吗?

【问题讨论】:

    标签: grails groovy memoization


    【解决方案1】:

    其中一个问题是memoize() 仅适用于闭包。闭包是对象,所以如果你在服务中存储一个,它就是“状态”。

    在 grails 中缓存服务的更好方法是使用 Spring Cache plugin。然后要缓存一个服务方法的结果,只需用@Cacheable注解该方法即可。它还支持多个缓存、自动刷新和缓存控制器输出。

    【讨论】:

    • 我会接受这个答案。明确一点:我们同意 .memoize() 在普通的 Web 应用程序中没有意义,因为它违反了无状态原则,对吗?
    • 嗯,缓存根据定义是有状态的。但是,spring 缓存的方式比 memoize() 更适合 grails/spring,因为它将状态保存在一个地方,正确处理集群,并且不需要您使用闭包而不是方法。
    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2010-12-10
    • 2014-04-29
    • 2010-09-29
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多