我想缓存具有以下方法的存储库类的响应:
@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 作为密钥填充图书缓存?
答案 0 :(得分:1)
再一次,这个nearly identical question不断出现,只有略微不同的期望,这次与SD Repositories 结合使用,特别是findAll()
查询方法。同样,每个用例的答案都是相同的......您需要为您的缓存提供商(例如Ehcache,Redis或Hazelcast)提供自定义的CacheManager
和Cache
实施。
默认情况下,OOTB, Spring的缓存抽象不会将缓存的方法数组/集合类型返回值拆分为目标缓存中的单独条目。你必须亲自处理。
有关某人如何处理此问题的示例,请参阅我的上一个回复。
-j