使用org.springframework.cache.ehcache.EhCacheCacheManager&假设我有方法:
@Cacheable("imageData") // add key = xyz here?
public List<ImageData> getProductIdAndColorCodeForSkus(List<Integer> skus) {
thread sleep
...do some stuff...
return listOfImageData;
}
我已经使用skus {111111,111222}尝试了这种方法。我后来想将ImageData对象从缓存中拉出来,例如:
Cache imageDataCache = cacheManager.getCache("imageData");
imageDataCache.get(key, ImageData.class) // what do I use for key?
我试过了
new Integer(111111)
但这将返回null结果。我也尝试过一个带有那个sku的列表。
另外,我知道两个ImageData都被缓存并且可以单独检索,因为当我第二次使用具有单个sku:111111或111222的列表调用此方法时,线程睡眠不会发生。
答案 0 :(得分:2)
默认情况下,缓存抽象使用SimpleKeyGenerator
来生成基于方法参数的密钥。在您的情况下,您有一个List<Integer>
,这样就可以使用列表创建SimpleKey
。
如果您对此不满意,可以自定义KeyGenerator
。由于您正在其他地方直接访问缓存,因此我强烈建议您控制密钥生成器,以便您的API保持一致。