48 lines
1.8 KiB
Markdown
48 lines
1.8 KiB
Markdown
# 方法缓存
|
||
  @Cached注解在Service的方法上,实现对方法结果进行缓存。
|
||
     1、返回类型不能是```void```/```CompletableFuture<Void>```<br>
|
||
     2、返回类型必须是可json序列化的 <br>
|
||
     3、修饰必须是```protected```/```public``` <br>
|
||
     4、修饰不能是```final```/```static``` <br>
|
||
|
||
  将结果进行本地缓存30秒
|
||
```java
|
||
@Cached(key = "name", localExpire = "30")
|
||
public String getName() {
|
||
return "haha";
|
||
}
|
||
```
|
||
|
||
  以参数code为key将结果进行本地缓存(时长由环境变量```env.cache.expire```配置,没有配置采用默认值30秒)、远程缓存60秒
|
||
```java
|
||
@Cached(key = "#{code}", localExpire = "${env.cache.expire:30}", remoteExpire = "60")
|
||
public CompletableFuture<String> getNameAsync(String code) {
|
||
return CompletableFuture.completedFuture(code);
|
||
}
|
||
```
|
||
|
||
  以参数code+map.id为key将结果进行远程缓存60毫秒
|
||
```java
|
||
@Resource
|
||
private CacheManager cacheManager;
|
||
|
||
//实时修改远程缓存的key值
|
||
public void updateName(String code, Map<String, Long> map) {
|
||
cacheManager.remoteSetString(code, code + "_" + map.get("id"), Duration.ofMillis(60));
|
||
}
|
||
|
||
@Cached(key = "#{code}_#{map.id}", remoteExpire = "60", timeUnit = TimeUnit.MILLISECONDS)
|
||
public String getName(String code, Map<String, Long> map) {
|
||
return code + "-" + map;
|
||
}
|
||
```
|
||
|
||
# 缓存配置
|
||
```xml
|
||
<!--
|
||
全局Serivce的缓存设置,没配置该节点将自动创建一个。
|
||
enabled: 是否开启缓存功能。默认: true
|
||
source: 远程CacheSource的资源名
|
||
-->
|
||
<cache enabled="true" source="xxx"/>
|
||
``` |