有谁知道Ehcache的默认密钥生成是如何工作的?如果我有以下方法:
@Cacheable(cacheName = CACHE_KEY) // CACHE_KEY is static final field.
public List<DataObject> list(
int firstRecord, int maxRecords, int pageSize, FilterObject filter) {
....
}
其中 FilterObject
是自定义POJO,我应该期望什么是实际的缓存键?
我观察的是当使用不同的 FilterObject
实例而不更改我的方法调用的其他参数时,它总是产生相同的结果 - 第一个调用的结果被缓存并返回 .
可能是导致行为的 FilterObject
POJO - 我认为它是一些序列化,或者是 .toString()
问题,因为我没有覆盖相关方法 .
我仍然无法找到有关如何在Ehcache的网站和 @Cacheable
注释文档中形成此方法的缓存密钥的确切信息 . 我很感激有关此主题的任何信息和建议 .
2 回答
这是默认密钥生成器
如您所见,它结合了每个方法参数的哈希码 .
一切都在Spring reference documentation中解释,即:
28.3.1.1默认密钥生成:
及以下:
28.3.1.2自定义密钥生成声明:
以及来自文档的示例:
因此,在您的情况下,您应该只为
FilterObject
实现equals()
和hashCode()
. 体面的IDE可以为您生成它们 .