使用 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;
}
我已经使用 sku {111111, 111222} 调用了此方法。我稍后想从缓存中提取一个 ImageData 对象,例如:
Cache imageDataCache = cacheManager.getCache("imageData");
imageDataCache.get(key, ImageData.class) // what do I use for key?
我已经尝试过
new Integer(111111)
但这将返回空结果。我也尝试过传递该 sku 的列表。
此外,我知道两个 ImageData 都被缓存并且可以单独检索,因为当我使用具有单个 sku:111111 或 111222 的列表第二次调用此方法时,线程 sleep 不会发生。
最佳答案
缓存抽象使用 SimpleKeyGenerator
默认情况下根据方法参数生成 key 。在你的情况下,你有一个 List<Integer>
所以这将创建一个 SimpleKey
与列表。
如果您对此不满意,可以自定义 KeyGenerator
。由于您直接在其他地方访问缓存,我强烈建议您控制 key 生成器,以便您的 API 保持一致。
关于java - 从 SpringFramework Ehcache 列表中提取单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467386/