Groovy 是否可以清除带有@memorized注释的特定函数的缓存?
我正在尝试用@Memoized注释一个函数,为一些每天只更改一次的数据提供一个简单的缓存机制。是否可以指示我的应用程序清除特定函数的缓存?我认为重置缓存的唯一方法是重新启动应用程序/JVM。查看与memonization相关的代码,API中似乎没有任何允许以编程方式重置缓存的内容Groovy 是否可以清除带有@memorized注释的特定函数的缓存?,groovy,Groovy,我正在尝试用@Memoized注释一个函数,为一些每天只更改一次的数据提供一个简单的缓存机制。是否可以指示我的应用程序清除特定函数的缓存?我认为重置缓存的唯一方法是重新启动应用程序/JVM。查看与memonization相关的代码,API中似乎没有任何允许以编程方式重置缓存的内容 与memonization相关的Javadoc确实提到,如果发生垃圾收集,值就会消失,但我猜这是不可靠的,甚至可能不可能强制垃圾收集 我认为在方法上使用@Memoized注释是不可能的,但是在闭包上使用.Memoize
与memonization相关的Javadoc确实提到,如果发生垃圾收集,值就会消失,但我猜这是不可靠的,甚至可能不可能强制垃圾收集 我认为在方法上使用@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
您尝试过使用吗?我可以看出这对于设置大小限制很有用,但我没有看到可以使用它从特定方法中逐出所有缓存的方法。