从 SpringFramework Ehcache 列表中提取单个对象

Pulling single object out of SpringFramework Ehcache list

使用 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)

但这将 return 返回一个空结果。我也尝试过使用该 sku 传递列表。

此外,我知道这两个 ImageData(s) 都被缓存并且可以单独检索,因为当我第二次使用具有单个 sku 的列表调用此方法时:111111 或 111222 线程休眠不会发生。

缓存抽象默认使用SimpleKeyGenerator根据方法参数生成键。在您的情况下,您有一个 List<Integer>,因此将使用列表创建一个 SimpleKey

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

更多信息in the documentation