【问题标题】:Spring Cache, how to delete another cached data when new data is cached?Spring Cache,缓存新数据时如何删除另一个缓存数据?
【发布时间】:2021-04-04 13:10:34
【问题描述】:

标题可能看起来很奇怪,但这是问题所在。

我在 Spring Boot 应用程序上使用 ehcache。我有一个看起来像这样的函数:

public Result foo(double value, String id){
    ...
    ...
    return convertValueToResult(value,id); 
}

现在我需要的是这种情况:我想缓存这个函数,这样如果我收到具有相同值的相同 id(字面意思是相同的参数),我想从缓存中返回结果而不再次执行该函数.

但是,如果我得到具有不同值的相同 id,我想重新执行该函数,计算答案,将其缓存并删除以前缓存的数据与以前的值。

如何使用@Cacheable、@CachePut 或@CacheEvict 注释来实现这一点?非常感谢任何帮助。

【问题讨论】:

    标签: spring-boot caching ehcache


    【解决方案1】:

    将缓存视为地图。如果使用相同的键做一个put,它将覆盖该值。

    在你上面的代码中你将不得不使用@Cacheable(key="#id")

    【讨论】:

    • 但是在这种情况下,每当我得到相同的 id 但 不同的值 时,它会返回以前缓存的数据,因为它们共享相同的键。但我想用这个新值重新执行函数。
    • 你将不得不使用@Cacheable注解默认执行的缓存键中的值(从注解中删除“键”),并使用TTL以便缓存在一段时间后过期时间。
    • 感谢您的回答。目前,我似乎没有任何其他选择可以使用 TTL 等待该数据自动过期。
    猜你喜欢
    • 2019-04-07
    • 2014-01-18
    • 1970-01-01
    • 2014-10-12
    • 2021-04-06
    • 1970-01-01
    • 2019-09-01
    • 2012-12-16
    • 2015-11-20
    相关资源
    最近更新 更多