http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key 上面的链接显示了当默认缓存键不需要方法的所有参数时如何指定键。但是,如何指定多个参数(但不是方法arg列表中的所有参数)作为Cacheable注释中缓存的键?
答案 0 :(得分:2)
如您所知,key
注释的@Cacheable
属性允许使用SpEL。在所有情况下,用于访问基础Cache
的实际密钥必须“评估”为单个值。因此,您必须使用 SpEL 的强大功能来组合形成(唯一)键的@Cacheable
方法参数。
举例来说,我们想要通过作者,版本和标题找到一本书。即,我们可能有@Cacheable
方法签名,如此...
@Cacheable(cacheNames = "Books", key="#author.name + #edition + #title")
Book findBook(Author author, Integer edition, String title, boolean checkWarehous, boolean includeUsed) {
...
}
如您所见,密钥是方法参数的组合和子集。
字面上,用于组合@Cacheable
方法参数以用作密钥的任何有效 SpEL 表达式都适用。
对于可以访问密钥的各个组件(例如作者,版本,标题等)的复杂密钥,最好创建自定义密钥类(例如BookKey)并使用自定义Spring KeyGenerator (例如BookKeyGenerator)生成Cache
密钥。请注意,@Cacheable
方法的方法,目标类和参数(例如findBook(author, edition, title, ...)
)均可供自定义KeyGenerator
使用。
希望这有帮助。
答案 1 :(得分:0)
0 param:key为0
1 param:key是param
2个或更多参数:key是hashCode(param0,param1,...)