更正键注释以缓存列表中的项目而不是整个列表
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 提供的通用抽象如何能够涵盖这些特定用例?
简而言之,您必须为此类特定用例编写自己的缓存逻辑。
下面代码的问题是缓存基于列表而不是列表中的每个项目。
因此,如果我向此方法发送一个包含 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 提供的通用抽象如何能够涵盖这些特定用例?
简而言之,您必须为此类特定用例编写自己的缓存逻辑。