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

标签 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;
}

我已经使用 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 保持一致。

更多信息in the documentation

关于java - 从 SpringFramework Ehcache 列表中提取单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467386/

相关文章:

java - 无法映射我的 Spring Maven 项目的资源

mysql - 如何使用 Spring Boot/MySQL/Hibernate 重启数据库

java - Spring Boot 和 Logback : Exception thrown from ApplicationListener handling ContextClosedEvent

tomcat - 如何使用ssh隧道远程连接到tomcat上的jmx而不破坏ehcache

spring - ehCache 有自动刷新的选项吗?

java - Spring Boot 2.0.0M3 Spring 执行器

WEB-INF 之外的 Java .class 文件?

java - EHCache 如何检查缓存中是否有内容?

java - opencv中哪个函数可以检测并去除物体的阴影?

spring-boot - 如何将 "Example Value"添加到 Swagger 中的参数