@Cacheable()没有返回正确的缓存

问题描述:

我很清楚,这个主题有很多问题,但我无法理解它。问题似乎是@CachePut不会将新值添加到@Cacheable列表中。@Cacheable()没有返回正确的缓存

调试问题后,我发现问题似乎在关键。

这里是代码片段

@CacheConfig(cacheNames = "documents") 
interface DocumentRepository { 

@CachePut(key = "#a0.id") 
Document save(Document document); 

@Cacheable() 
List<Document> findAll(); 
} 

所以,当我调用保存方法,所使用的密钥缓存递增的整数,或者1,2,3 ... 但是,当我试图让所有文档中,缓存都使用SimpleKey []作为键。如果我尝试为@Cacheable使用相同的密钥,那么将得到SpelEvaluationException,但无法在null上找到属性“id”。

所以我最后留下的是功能缓存(数据保存在缓存中),但不知何故,我无法检索它。 底层缓存实现是EhCache。

我真的不明白你在这里期待什么。

它看起来像你期待你的findAll方法返回名为documents缓存的全部内容。我认为文档中没有任何内容可以让您断定此功能存在(它不会)。它也非常脆弱。如果我们正在实现该功能,则findAll将根据缓存的状态返回不同的结果。例如,如果有人将此缓存配置为最大大小为100。或者如果缓存在启动时没有预热。

您不能指望缓存抽象(或甚至是缓存库)维护“对象列表”的同步视图。 findAll所做的是返回与没有参数的键对应的条目(默认为new SimpleKey)。