Groovy 是否可以清除带有@memorized注释的特定函数的缓存?

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

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

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


与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

您尝试过使用吗?我可以看出这对于设置大小限制很有用,但我没有看到可以使用它从特定方法中逐出所有缓存的方法。