Cacheable 的sync
时间: 2023-10-21 20:04:12 浏览: 285
@Cacheable的sync属性是用来控制缓存是否支持并发访问的。默认情况下,sync属性的值为false,即不支持并发访问。这对于ConcurrentMapCache来说存在缓存并发问题,因为ConcurrentMapCache本身不是线程安全的。但对于GuavaCache来说,sync属性的默认值为true是合理的,因为GuavaCache本身是可以处理并发访问的。
当我们将@Cacheable的sync属性设置为true时,会启用同步机制来保证并发访问的安全性。在这种情况下,使用了GuavaCache的LoadingCache来处理缓存操作,具体涉及到了refreshAfterWrite策略。同时,使用了Cache.get(key, Callable)方法来获取缓存数据,并且在获取数据的过程中可以进行同步操作。
需要注意的是,@Cacheable注解本身并没有提供加锁功能,因此sync属性是否起效取决于具体的缓存实现。在Spring Cache中,具体的缓存实现类会根据sync属性的值来决定是否进行同步操作。
相关问题
Cacheable sync
在使用缓存的时候,可以通过设置@Cacheable的sync属性来实现缓存的同步。sync属性的默认值为false,表示在多线程环境下,多个线程可以同时进入计算,并且可能导致多次计算,而违反了缓存的目的。但是当sync属性设置为true时,底层会将缓存锁住,只有一个线程可以进入计算,其他线程则会被堵塞,直到返回结果更新到缓存中。这样可以保证在多线程环境下只计算一次,并且将结果更新到缓存中。比如在使用@Cacheable注解时可以使用sync属性来实现缓存的同步,例如:@Cacheable(cacheNames="books", key="#map['bookid'].toString()", sync=true) public Book findBook(Map<String, Object> map);<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [ck-jesse#l2cache#二级缓存最佳实践用法1](https://download.csdn.net/download/weixin_35780601/86259627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict](https://blog.csdn.net/yb223731/article/details/107619718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
spring cache 中 @cacheable 中 sync 参数
在Spring Cache中,@Cacheable注解是用来标记一个方法的返回值可以被缓存起来以提高性能。其中,sync参数用于指定是否启用同步模式,默认值为false,表示不启用同步。当sync参数设置为true时,意味着在缓存方法执行期间,其他请求将会被阻塞,直到缓存方法执行完成才会返回结果。而当sync参数设置为false时,存方法的多个请求可以并发执行,不会相互阻塞。所以,如果你想要在缓存方法执行期间阻塞其他请求,可以将sync参数设置为true。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [MyBatis二级缓存+spring cache @Cacheable、@CacheConfig](https://blog.csdn.net/qq_37337660/article/details/120188742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [Spring cache @Cacheable的使用](https://blog.csdn.net/weixin_43759039/article/details/128666454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文