如何在 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, ...)
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, ...)