问题描述
我有一个需求,其中对产品 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
getProductCategories(列出产品){
//当productCategoryMap中找不到数据时,从缓存和/或加载的缓存中返回数据
}
loadProductCategories(List products);
谢谢。
解决方法
番石榴缓存适合作为此用例的最佳解决方案。 我使用 loadAll(..) 获取产品 ID 列表。
这里的问题是 getAll(..) 在没有找到给定产品 ID 的数据时失败/抛出异常,这可以通过捕获异常然后调用 getAllPresent(..) 来处理