@Cacheable(value = {"userLogs"}, keyGenerator = "cacheKeyGenerator" )
package com.opencloud.common.configuration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.interceptor.SimpleKey;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
// 缓存key 生成器
@Slf4j
@Component
public class CacheKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
if(params.length == 0){
return SimpleKey.EMPTY;
}
StringBuilder key = new StringBuilder();
for (Object param : params) {
//此处处理的是一个对象 如果是Map需自行验证是否可行
Field[] fields = getAllFields(param.getClass());
for(Field field:fields) {
//抑制Java对修饰符的检查
field.setAccessible(true);
try {
// log.info("fieldName:{} fieldVuale:{}",field.getName(),field.get(param));
key.append(field.getName()+"="+field.get(param)+" , ");
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return key;
}
/**
* 获取本类以及父类的属性方法
* @param clazz 当前类对象
* @return 字段数组
*/
private static Field[] getAllFields(Class<?> clazz){
List<Field> fieldList = new ArrayList<>();
while (clazz != null){
fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
clazz = clazz.getSuperclass();
}
Field[] fields = new Field[fieldList.size()];
return fieldList.toArray(fields);
}
}
相关推荐
cacheable-flash, 获取处理页cacheing的Rails Flash 对象 是一个新的希望这里 gem 不再被维护。 请考虑切换到 github.com/leonid-shevtsov/unobtrusive_flash 。这么长的时间,感谢你 ! CacheableFlash 描述这个...
Laravel开发-cacheable Laravel 5的查询缓存
Laravel开发-cacheable-auth-user 为Laravel 5.3缓存auth::user()。这个包为Laravel添加了新的驱动程序。
这里面说的“相同参数”一定要正确理解,也就是说同一个方法使用了@Cacheable注解,但是有不同的参数组合来调用这个方法,则会才产生你的组合数个key来存储缓存数据! 好了,接下来我们看一下,这注解的每个参数...
通过spring-cache对方法进行缓存,同时验证如何通过key更新指定的缓存!
1、#加变量名字,就可以表示变量了, 比如 #id2、使用对象中的变量 #user.id 或者#user.getId() 都可以condition:触发条件,只
Laravel开发-cacheable .zip
关于@Cacheable注解在方法上根据请求参数拉起缓存内容,同时@CacheEvict 注解在方法上清空指定key缓存的原理内容
is-cacheable是一个OPEN开源项目。 这意味着: 做出重大和有价值贡献的个人将获得对项目的承诺访问权,以按照自己的意愿进行贡献。 该项目更像是一个开放的Wiki,而不是标准的受保护的开放源代码项目。 有关更多...
Cacheable-Network A Cacheable Network Library For Android Application Intro The total scenario of A network calling is to communicate with server then get back the result. So, to handle this two ...
可缓存的响应 一个HTTP兼容的路由路径中间件,用于通过无效支持提供缓存响应。为什么如果您想拥有一流的用户体验,则服务器端渲染( SSR )是一件豪华但必不可少的事情。 做服务器端事情的主要问题是与动态事情相关...
EntityFrameworkCore.Cacheable ...这是未缓存和缓存查询的1,000次迭代的样本结果,再次称为一个性能很好的MSSQL数据库。 Average database query duration [+00:00:00.1698972]. Average cache query duration [+00:0
3.1、spring boot redis注解缓存Cacheable (value) 1
spring + redis使用@Cacheable,@CachePut,@CacheEvict详细步骤
一个springcacheable例子,页面使用layer一个springcacheable例子,页面使用layer