带有Spring Cache的Ehcache分配了错误的密钥



我在UserService中有一个方法:

@Cacheable(value="user", key="#p0")
public User find(String name) {
    return userRepository.findOneByName(name);
}

它会缓存。但后来我尝试从"用户"缓存中获取所有密钥:

CacheManager cacheManager = CacheManager.getInstance();
cacheManager.getCache("user").getKeys().forEach(o -> log.debug(o.toString()));

输出:

com.cache.domain.User#1

相反,例如,"John Doe"。

参见getKeys 的Javadoc

返回缓存中所有元素的列表,无论这些元素是否过期。

这实际上是在返回元素,而不是id。您可能需要更改代码,将o强制转换为Element,然后输出getObjectKey()

不需要指定key属性。由于您想要的是使用方法的单个参数(name),因此缓存抽象将默认使用该参数。