从 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 保持一致。
使用 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 保持一致。