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