是否可以清除使用@Memoized注释的特定功能的缓存?

时间:2014-09-11 21:45:33

标签: groovy

我正在尝试使用@Memoized注释一个函数,为一些每天只更改一次的数据提供简单的缓存机制。是否可以指示我的应用程序清除特定功能的缓存?

2 个答案:

答案 0 :(得分:1)

我不认为在方法上使用@Memoized注释是可能的,但你可以在闭包上使用.memoized()方法做类似的事情。只需保持对原始闭包的引用,并在每次想要获得带有干净缓存的新闭包时调用.memoized()。

    def x = 5
    def cl = { it + x }
    def clMemo = cl.memoize()
    println clMemo(3)           //Outputs 8

    x = 1
    println clMemo(3)           //Outputs 8

    clMemo = cl.memoize()
    println clMemo(3)           //Outputs 4

答案 1 :(得分:0)

我认为重置缓存的唯一方法是重启应用程序/ JVM。查看与memoization相关的代码,API中似乎没有任何内容允许以编程方式重置缓存。

与memoization相关的Javadoc确实提到如果发生垃圾收集,值会消失,但我的猜测是不可靠或甚至可能强制垃圾收集。 http://docs.groovy-lang.org/latest/html/api/groovy/lang/Closure.html#memoize()