从SpringFramework Ehcache列表中拉出单个对象

时间:2016-02-17 20:46:52

标签: java spring-boot ehcache spring-cache

使用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的列表调用此方法时,线程睡眠不会发生。

1 个答案:

答案 0 :(得分:2)

默认情况下,缓存抽象使用SimpleKeyGenerator来生成基于方法参数的密钥。在您的情况下,您有一个List<Integer>,这样就可以使用列表创建SimpleKey

如果您对此不满意,可以自定义KeyGenerator。由于您正在其他地方直接访问缓存,因此我强烈建议您控制密钥生成器,以便您的API保持一致。

更多信息in the documentation