java @Cacheable写法
时间: 2024-08-16 15:09:37 浏览: 189
Java `@Cacheable` 是Spring框架中的一个注解,用于标记方法为缓存计算结果,通常应用于声明式缓存管理。当你在一个服务方法上应用此注解,Spring Data REST 或其他支持缓存的工具会在满足一定条件下自动从缓存中获取数据,而不是直接执行数据库查询。
基本的写法如下:
```java
import org.springframework.cache.annotation.Cacheable;
public class SomeService {
@Cacheable(value = "myCache", key = "#id") // 缓存名称和key生成策略
public User getUserById(Long id) {
// 这里是实际的数据库查询或其他耗时操作,不会再次执行,除非缓存已过期或未命中
return userRepository.findById(id);
}
}
```
参数说明:
- `value`:指定缓存的名字,如果多个方法共享同一缓存,可以用通配符 "*" 来表示。
- `key`:定义生成缓存键的方式,这里的`"#id"` 表示使用方法参数`id`作为唯一标识。
当`getUserById`方法被调用时,如果该用户的记录已经存在于缓存中,Spring会直接返回缓存的结果,否则执行数据库查询并将结果放入缓存。
相关问题
@Cacheable key格式
@Cacheable注解的key属性用于指定缓存的key,可以使用SpEL表达式来动态生成key。以下是一些常见的key格式:
1.使用字符串作为key:
```java
@Cacheable(cacheNames = "myCache", key = "myKey")
public String myMethod() {}
```
2.使用方法参数作为key:
```java
@Cacheable(cacheNames = "myCache", key = "#param")
public String myMethod(String param) {}
```
3.使用多个方法参数作为key:
```java
@Cacheable(cacheNames = "myCache", key = "#param1 + #param2")
public String myMethod(String param1, String param2) {}
```
4.使用SpEL表达式生成key:
```java
@Cacheable(cacheNames = "myCache", key = "#root.methodName + #param")
public String myMethod(String param) {}
```
在上面的例子中,`#root.methodName`表示当前方法的名称,`#param`表示方法的第一个参数。
@Cacheable怎么使用
@Cacheable是Spring框架中的一个缓存注解,用于标记一个方法的返回值是可以被缓存的。当在同一个类中的其他方法调用这个被@Cacheable注解的方法时,Spring会先检查缓存中是否已经存在这个方法的返回值,如果存在,则直接返回缓存中的值,否则执行该方法并将返回值存入缓存中。@Cacheable注解可以用在类级别和方法级别上,用法如下:
1.在类级别上使用@Cacheable注解:
```java
@Service
@Cacheable(value = "myCache")
public class MyService {
// ...
}
```
2.在方法级别上使用@Cacheable注解:
```java
@Service
public class MyService {
@Cacheable(value = "myCache", key = "#id")
public User getUserById(Long id) {
// ...
}
}
```
在上面的例子中,@Cacheable注解的value属性指定了缓存的名称,key属性指定了缓存的键值,Spring会根据这个键值来检索缓存中是否已经存在该方法的返回值。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)