在单个请求 ID 级别缓存,其中 API 请求针对不同的 RequestId 集

问题描述


我有一个需求,其中对产品 API 的请求将具有多个产品 ID,并且每个请求的请求中的这组 Id 可以不同。

鉴于这个场景,如果我需要缓存以产品Id为key的产品数据,是否可以使用Spring Cache?

例如:

Request1 - prod1,prod2,prod3,.... 缓存创建 - {prod1=D1,prod2=G1,prod3=B3}

Request2 - prod4,prod5,....

prod2 - 从缓存和 使用 prod4 和 prod5 的新数据集更新缓存

请注意,我们无法为产品服务进行单一 API 调用。一种方法是不使用 spring 缓存,而是构建如下信息的 Map。

Map productCategoryMap;
getProductCategories(列出产品){
//当productCategoryMap中找不到数据时,从缓存和/或加载的缓存中返回数据
}
loadProductCategories(List products);

评论您对问题陈述的看法以及可能的实施方法

谢谢。

解决方法

番石榴缓存适合作为此用例的最佳解决方案。 我使用 loadAll(..) 获取产品 ID 列表。

这里的问题是 getAll(..) 在没有找到给定产品 ID 的数据时失败/抛出异常,这可以通过捕获异常然后调用 getAllPresent(..) 来处理