cacheable注解详解
时间: 2023-09-19 22:06:54 浏览: 96
`@Cacheable` 是 Spring Framework 中的一个注解,它可以用来标注方法或类,表示该方法或类的返回值可以被缓存起来,以提升系统的性能。
当一个方法或类被标注为 `@Cacheable` 后,Spring 会先从缓存中查找该方法或类的返回值,如果缓存中存在,则直接返回缓存中的结果,否则才会执行方法或类,并将结果缓存起来。缓存的实现可以是内存缓存、Redis 缓存等。
`@Cacheable` 注解有以下几个重要的属性:
- `value`:缓存的名称,可以指定多个,如 `@Cacheable(value={"cache1", "cache2"})`,默认为方法或类所在的包名。
- `key`:缓存的 key 值,可以使用 SpEL 表达式动态生成,如 `@Cacheable(key="'user_'+#id")`,其中 `#id` 表示方法的参数 id。
- `condition`:缓存的条件,只有满足条件的返回值才会被缓存,如 `@Cacheable(condition="#result != null")`,表示只有返回值不为 null 才会被缓存。
- `unless`:缓存的排除条件,如果满足排除条件,则不会被缓存,如 `@Cacheable(unless="#result.length() > 10")`,表示如果返回值长度大于 10,则不会被缓存。
需要注意的是,`@Cacheable` 注解只能用于方法或类上,并且被注解的方法或类必须是 public 的,否则无法被 AOP 代理,也就无法实现缓存功能。
相关问题
@Cacheable注解的作用
@Cacheable注解的作用是用于声明性缓存。当在方法上添加@Cacheable注解时,可以将方法的返回值缓存起来,以便在后续对该方法的调用中直接返回缓存的结果,而不必执行方法的实际逻辑。这样可以提高系统的性能和响应速度。通过指定缓存的名称和缓存的键值等参数,可以对不同的方法进行不同的缓存配置。例如,在使用@Cacheable注解时,可以指定缓存的名称为"myCache",并以方法的参数作为缓存的键值。这样当调用该方法时,如果缓存中已存在以参数为键的结果,将直接返回缓存的值,否则将执行方法的实际逻辑,并将结果存储到缓存中。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [@Cacheable使用详解](https://blog.csdn.net/run65536/article/details/130823256)[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: 100%"]
[ .reference_list ]
@Cacheable使用详解
`@Cacheable`是Spring框架中的一个注解,主要用于声明某个方法的计算结果应该被缓存起来,以便后续快速获取,提高性能。这个注解通常应用在Repository或者Service层的方法上。
使用`@Cacheable`的基本步骤如下:
1. 配置缓存管理器:首先需要配置Spring Cache,包括定义缓存区域(如Redis、Ehcache等)以及缓存策略(过期时间、缓存容量等)。
2. 注解方法:在需要缓存的方法前添加`@Cacheable`,并指定缓存名。例如:
```java
@Cacheable(value = "productCache", key = "#id")
public Product getProductById(Long id) {
// ... 省略数据库查询逻辑
}
```
这里`value`属性是缓存名称,`key`属性则是生成缓存键的表达式,对于上面的例子,当`getProductById`被调用时,会根据传入的产品ID生成键值对存储到`productCache`中。
3. 缓存击穿/雪崩处理:如果缓存的数据更新了,而缓存在一定时间内未刷新,可能导致缓存数据不准确。这时可以设置缓存失效策略,如通过版本号或最后修改时间进行缓存键的更新。
4. 销毁缓存:如果需要在特定条件(比如用户登出)下清除缓存,可以配合`@CacheEvict`一起使用。
阅读全文