如何使用spring缓存基于其主键缓存entires列表

时间:2017-09-20 19:12:43

标签: spring list caching spring-boot spring-cache

我想缓存具有以下方法的存储库类的响应:

@Cacheable(cacheNames = "books", key="#id")
Book findById(Long Id);

@CacheEvict(cacheNames = "books", key = "#id")
void deleteById(Long id);

@Cacheable(cacheNames = "books", key="#book.id")
Book save(Book book);

@Cacheable("books")
List<Book> findAll();

findAll()方法外,其他人正在按预期工作。

如何 findAll() book.id 作为密钥填充图书缓存?

1 个答案:

答案 0 :(得分:1)

再一次,这个nearly identical question不断出现,只有略微不同的期望,这次与SD Repositories 结合使用,特别是findAll()查询方法。同样,每个用例的答案都是相同的......您需要为您的缓存提供商(例如Ehcache,Redis或Hazelcast)提供自定义的CacheManagerCache实施。

默认情况下,OOTB, Spring的缓存抽象不会将缓存的方法数组/集合类型返回值拆分为目标缓存中的单独条目。你必须亲自处理。

有关某人如何处理此问题的示例,请参阅我的上一个回复。

-j