使用spring-boot及其缓存机制,是否可以将所有作为集合返回的实体自动地一个一个地存储到缓存中?
例如,描述以下存储库方法:
@Query("...") List<Foo> findFooByBar(Bar bar);
我想将它们一个接一个地插入到Spring Cache中,这意味着将有N次插入(列表中的每个元素一个),而不是一个(整个列表)。
例:
@Query("...") @CachePut(value = "foos", key = "result.each.id") List<Foo> findFooByBar(Bar bar);
不久前,另一个人对SO提出了类似/相关的问题,我提供了一个答案以及一个示例。
如您所知,默认情况下,开箱即用的 Spring 不会以您建议的方式处理多个键/值,尽管我喜欢您的想法,并且您的示例/ UC是有效的。
但是,通常情况下,您只需使用一点点额外的工作就可以使用中间解决方案来实现所需的目标。 Spring 是Open / Closed原理的出色示例, Spring的Cache Abstraction中 的2个主要抽象是Cache和CacheManager接口。
通常,您可以选择一个现有的实现,然后像在示例中所做的那样“适应”Cache或CacheManager或两者。
Cache
CacheManager
尽管不那么理想或不方便,但希望它会给您一些想法,直到考虑到SPR-15213(尽管可能不是)。