@Cacheable原理
时间: 2024-05-29 20:07:32 浏览: 164
@Cacheable是Spring框架提供的注解,它可以将方法的返回值缓存起来,以便下次调用时,如果传入的参数与之前相同,则可以直接从缓存中获取结果,避免了重复执行相同的方法。@Cacheable注解可以应用在方法上,也可以应用在类上。如果应用在类上,则所有该类的方法都将使用缓存。
@Cacheable的原理是通过使用缓存管理器(如Ehcache、Redis等)在内存或外部存储区域中创建一个缓存来实现。当使用@Cacheable注解时,Spring会先查询缓存,如果缓存中有数据,则直接返回缓存中的数据;如果没有,则执行方法,并将返回值放入缓存中。同时,Spring还提供了@CachePut和@CacheEvict注解,分别用于更新缓存和清除缓存。
需要注意的是,@Cacheable只有在第一次执行方法时才会缓存结果,如果方法的返回值会随着时间而改变,则缓存的结果可能会过期或不正确。因此,在使用@Cacheable时需要根据实际情况设置缓存的失效时间或清除策略。
相关问题
@Cacheable的原理
@Cacheable是Spring框架中的一个注解,用于实现缓存功能。其原理是在方法执行前,先检查缓存中是否存在该方法的返回值,如果存在,则直接返回缓存中的值,否则执行该方法并将返回值存入缓存中。具体实现过程如下:
1. Spring在启动时会扫描所有带有@Cacheable注解的方法,并为其生成代理对象。
2. 当调用带有@Cacheable注解的方法时,代理对象会先从缓存中查找是否存在该方法的返回值。
3. 如果缓存中存在,则直接返回缓存中的值。
4. 如果缓存中不存在,则执行该方法,并将返回值存入缓存中。
下面是一个使用@Cacheable注解的例子:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Cacheable(value = "userCache", key = "#id")
public User getUserById(Long id) {
return userDao.getUserById(id);
}
}
```
在上面的例子中,@Cacheable注解被用于getUserById方法上。其中,value属性指定了缓存的名称,key属性指定了缓存的键值,这里使用了SpEL表达式来获取方法参数id的值作为缓存的键值。
@Cacheable 笔记
@Cacheable是一个注解,用于触发缓存的填充。它可以应用在方法上,将方法的返回值写入缓存中。 @Cacheable可以根据方法的请求参数来对结果进行缓存。这意味着如果相同的参数再次调用该方法,将直接从缓存中获取结果,而不是执行方法的实际逻辑。 @Cacheable的作用是将方法的返回结果缓存在缓存中,以提高后续相同请求的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [【Spring】Spring @Cacheable 官方学习及demo](https://blog.csdn.net/chenghan_yang/article/details/128487324)[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: 33.333333333333336%"]
- *2* [SpringBoot笔记-下篇.pdf](https://download.csdn.net/download/qq_37438795/12391712)[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: 33.333333333333336%"]
- *3* [springboot2.4.0缓存的工作原理与@Cacheable运行流程-笔记](https://blog.csdn.net/weixin_44414492/article/details/111561441)[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: 33.333333333333336%"]
[ .reference_list ]
阅读全文