1、@Cacheable
@Cacheable中的值,是最外层key的名称
@Cacheable("test")
@PostMapping("test")
public R test() {
R of = R.of();
of.put("ddddd","1233");
return of.sm3();
}
2、可以重写key的组成逻辑
public class ReqKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(":");
sb.append(method.getName());
sb.append(":");
if (params.length == 1) {
Object param = params[0];
if (param != null && param instanceof ReqMsg) {
if (StrUtil.isNotBlank(((ReqMsg) param).getOrg_id())) {
sb.append(((ReqMsg) param).getOrg_id()).append(":");
}
if (StrUtil.isNotBlank(((ReqMsg) param).getApp_id())) {
sb.append(((ReqMsg) param).getApp_id()).append(":");
}
if (StrUtil.isNotBlank(((ReqMsg) param).getUser())) {
sb.append(((ReqMsg) param).getUser()).append(":");
}
Map<String, String> data = MapUtil.filter(((ReqMsg) param).getData(),
(Filter<Map.Entry<String, String>>) entry -> !StrUtil.equals(entry.getKey(), "clientId"));
sb.append(JSON.toJSONString(data));
Cacheable cacheable = method.getAnnotation(Cacheable.class);
if (cacheable != null) {
List<String> cacheNames = Arrays.asList(cacheable.value());
if (cacheNames.contains("oneMonth")) {
sb.append(":").append(DateUtil.format(new Date(), "yyyyMM"));
return sb.toString();
} else if (cacheNames.contains("oneDay")) {
sb.append(":").append(DateUtil.format(new Date(), "yyyyMMdd"));
return sb.toString();
}
}
} else {
if (param != null) {
sb.append(StrUtil.toString(param));
}
}
} else {
for (Object obj : params) {
if (obj != null) {
sb.append(obj.toString()).append("_");
}
}
}
System.out.println("ReqKeyGenerator====" + sb.toString());
return sb.toString();
}
}
3、默认有效期5分钟,也可以指定