gpt4 book ai didi

java - 使用spring @Caching时缓存层的顺序是什么?

转载 作者:行者123 更新时间:2023-11-30 08:31:03 26 4
gpt4 key购买 nike

使用 @Caching注解,spring 允许添加多个 @Cacheable单个方法的注解。自 conditional caching可以使用@Cacheable,注释的顺序是什么,因此条件的评估顺序是什么——如果多个缓存的评估结果为真,值是否存储在多个缓存中?再次在缓存获取期间,所有条件是否并行评估,并从条件评估为真的任何缓存中获取值?

例如考虑:

@Caching( cacheable = { @Cacheable(cacheNames="smallBooks", condition="#name.length < 32"), @Cacheable(cacheNames="fiction", condition="#domain.equals('fiction')"), @Cacheable(cacheNames="everythingelse")})
public Book findBook(String name, String domain)

最佳答案

不,没有并行评估,@Cacheable 注释正在获得 gathered in the order of definition根据链接代码(可缓存属性毕竟是一个数组)。重要的是要意识到您正在以不同的名称和条件定义 3 个独立的缓存。

因为我不知道你的用例,这里是对 Spring Caching Guide 的轻微改动:

//..
@Override
@Caching( cacheable = {
@Cacheable(cacheNames = "sth"),
@Cacheable(cacheNames="everythingelse")
})
public Book getByIsbn(String isbn) {
simulateSlowService();
return new Book(isbn, "Some book");
}
//..

并通过在 Spring Boot 的 application.properties 中的缓存包中定义 DEBUG 级别:

logging.level.org.springframework.cache=DEBUG

您可以看到它实际上是如何作为单独的缓存加载的:

2016-11-29 00:52:26.472 DEBUG 23426 --- [           main] o.s.c.a.AnnotationCacheOperationSource   : Adding cacheable method 'getByIsbn' with attribute: [Builder[public hello.Book hello.SimpleBookRepository.getByIsbn(java.lang.String)] caches=[sth] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false', Builder[public hello.Book hello.SimpleBookRepository.getByIsbn(java.lang.String)] caches=[everythingelse] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false']

关于java - 使用spring @Caching时缓存层的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40855670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com