如何在 spring 可缓​​存键的方法中指定多个参数

how to specify more than one param in method for spring Cacheable key

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key 上面的 link 显示了当默认的缓存键不需要方法的所有参数时如何指定键。但是如何在Cacheable注解中指定多个param(但不是方法arg列表中的所有参数)作为缓存的key?

如您所知,@Cacheable注解的key属性允许使用SpEL。在所有情况下,用于访问底层 Cache 的实际密钥必须 "evaluate" 为单个值。因此,您必须利用 SpEL 的强大功能来组合构成(唯一)键的 @Cacheable 方法参数。

举例来说,假设我们要按作者、版本和书名查找图书。即,我们可能有一个像这样的 @Cacheable 方法签名...

@Cacheable(cacheNames = "Books", key="#author.name + #edition + #title")
Book findBook(Author author, Integer edition, String title, boolean checkWarehous, boolean includeUsed) {
 ...
}

如您所见,键是方法参数的组合和子集。

从字面上看,任何有效的 SpEL 表达式都适用于组合 @Cacheable 方法参数以用作键。

对于密钥的各个组成部分(如作者、版本、标题等)均可访问的复杂密钥,最好创建自定义密钥 class(例如 BookKey)并使用自定义密钥Spring KeyGenerator(例如 BookKeyGenerator)生成 Cache 密钥。请注意,方法、目标 class 和 @Cacheable 方法的参数(例如 findBook(author, edition, title, ...))都可用于您的自定义 KeyGenerator.

希望这对您有所帮助。

0 参数:键为 0

1 参数:key 是参数

2 个或更多参数:key 是 hashCode(param0, param1, ...)