更正键注释以缓存列表中的项目而不是整个列表

Correct key annotation for caching on items in a list rather then the whole list

下面代码的问题是缓存基于列表而不是列表中的每个项目。

因此,如果我向此方法发送一个包含 2 个项目的列表,它们都会被缓存,而不是再次调用该方法并删除其中一个项目,它应该从缓存中读取,但它会看到列表有已更改,因此运行该方法而不是使用缓存。

什么是正确的注释,以便缓存在单个项目而不是整个列表上?

@Override
@Cacheable(value = "cacheName")
public Properties retrieveProperties(List<String> testList) {

我认为这里的问题是你错过了在 @Cacheable 注释中声明一个键:

@Cacheable(value = "cacheName", key = "#root.method.name")

根据文档,如果未指定键,它会使用所有方法参数来创建键,因此如果您的列表发生变化,它可能会单独存储它。

如果这不是问题,则可能是您在 ehcache.xml 上的配置问题,可能 "timeToLive" 太短导致缓存重新加载。

希望这会有所帮助。

无法使用 Spring 缓存注释来做你想做的事。

此外,该操作的语义是什么?

  • Properties 内容是由 List 内容驱动的?
  • 还是别的?

Spring 提供的通用抽象如何能够涵盖这些特定用例?

简而言之,您必须为此类特定用例编写自己的缓存逻辑。