如何使用 spring 缓存根据主键缓存整个列表

How to cache the list of entires based on its primary key using spring caching

我想缓存存储库 class 的响应,它有以下方法:

@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[=22 填充 books 缓存=]作为键?

您需要为您的缓存提供程序(例如 Ehcache、Redis 或 Hazelcast)提供自定义的 CacheManager and Cache 实现。

默认情况下,OOTB,Spring 的缓存抽象 不会将缓存的方法 array/collection 类型 return 值拆分为单独的条目在目标缓存中。你必须自己处理。

查看我对此 nearly identical question 的最后回复。