...
|
...
|
@@ -6,9 +6,12 @@ import com.tianbo.warehouse.annotation.cache.annotation.RedisCachePut; |
|
|
import com.tianbo.warehouse.annotation.cache.annotation.RedisCacheable;
|
|
|
import com.tianbo.warehouse.annotation.cache.util.JDKSerializeUtil;
|
|
|
import com.tianbo.warehouse.annotation.cache.util.redis.DefaultKeyGenerator;
|
|
|
import com.tianbo.warehouse.util.RedisUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.aspectj.lang.ProceedingJoinPoint;
|
|
|
import org.aspectj.lang.Signature;
|
|
|
import org.aspectj.lang.annotation.After;
|
|
|
import org.aspectj.lang.annotation.Around;
|
|
|
import org.aspectj.lang.annotation.Aspect;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
...
|
...
|
@@ -17,6 +20,8 @@ import org.springframework.data.redis.core.ValueOperations; |
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.Objects;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@Aspect
|
...
|
...
|
@@ -49,16 +54,18 @@ public class RedisCacheableAspect { |
|
|
ValueOperations<String, Object> valueOper = redisTemplate.opsForValue();
|
|
|
byte[] value = (byte[]) valueOper.get(key);
|
|
|
if(value != null){
|
|
|
log.info("[CACHE-HIT]-命中:[{}],缓存时效:[{}]分",key,redisTemplate.getExpire(key, TimeUnit.MINUTES));
|
|
|
//如果缓存有值,需要判断刷新缓存设置和当前缓存的失效时间
|
|
|
int reflash = cache.reflash();
|
|
|
if(reflash > 0){
|
|
|
if(reflash > 0 && StringUtils.isNotEmpty(key)){
|
|
|
//查询当前缓存失效时间是否在主动刷新规则范围内
|
|
|
long exp = redisTemplate.getExpire(key, TimeUnit.SECONDS);
|
|
|
if(exp <= reflash){
|
|
|
//主动刷新缓存,为不影响本次获取效率,采用异步线程刷新缓存
|
|
|
}
|
|
|
}
|
|
|
return JDKSerializeUtil.unserialize(value);
|
|
|
valueData = JDKSerializeUtil.unserialize(value);
|
|
|
return valueData;
|
|
|
}
|
|
|
//缓存中没有值,执行实际数据查询方法
|
|
|
if(valueData == null) {
|
...
|
...
|
@@ -66,9 +73,13 @@ public class RedisCacheableAspect { |
|
|
}
|
|
|
//写入缓存
|
|
|
if(cache.expire() > 0) {
|
|
|
valueOper.set(key, JDKSerializeUtil.serialize(valueData),cache.expire(),TimeUnit.SECONDS); //否则设置缓存时间 ,序列化存储
|
|
|
//否则设置缓存时间 ,序列化存储
|
|
|
valueOper.set(key, Objects.requireNonNull(JDKSerializeUtil.serialize(valueData)),cache.expire(),TimeUnit.SECONDS);
|
|
|
log.info("[CACHE-SET]-已设置缓存:[{}],缓存时效:[{}秒]",key,cache.expire());
|
|
|
} else {
|
|
|
valueOper.set(key, JDKSerializeUtil.serialize(valueData));
|
|
|
//永不过期
|
|
|
valueOper.set(key, Objects.requireNonNull(JDKSerializeUtil.serialize(valueData)));
|
|
|
log.info("[CACHE-SET]-已设置永久缓存:[{}]",key);
|
|
|
}
|
|
|
}
|
|
|
return valueData;
|
...
|
...
|
@@ -89,15 +100,17 @@ public class RedisCacheableAspect { |
|
|
public Object cachePut (final ProceedingJoinPoint pjp , RedisCachePut cacheput) throws Throwable{
|
|
|
try{
|
|
|
//生成缓存KEY
|
|
|
String[] keys = defaultKeyGenerator.generateKey(pjp, cacheput.cacheNames(), cacheput.cacheKey());
|
|
|
// String[] keys = defaultKeyGenerator.generateKey(pjp, cacheput.cacheNames(), cacheput.cacheKey());
|
|
|
String[] keys = defaultKeyGenerator.generateKey(pjp, cacheput.cacheKey());
|
|
|
Object valueData = pjp.proceed();
|
|
|
//写入缓存
|
|
|
for(String key : keys){
|
|
|
ValueOperations<String, Object> valueOper = redisTemplate.opsForValue();
|
|
|
if(cacheput.expire() > 0) {
|
|
|
valueOper.set(key, JDKSerializeUtil.serialize(pjp.getArgs()[0]),cacheput.expire(),TimeUnit.SECONDS);
|
|
|
valueOper.set(key, Objects.requireNonNull(JDKSerializeUtil.serialize(valueData)),cacheput.expire(),TimeUnit.SECONDS);
|
|
|
log.info("[CACHE-SET]-更新缓存:[{}],缓存时效:[{}秒]",key,cacheput.expire());
|
|
|
} else {
|
|
|
valueOper.set(key, JDKSerializeUtil.serialize(pjp.getArgs()[0]));
|
|
|
valueOper.set(key, Objects.requireNonNull(JDKSerializeUtil.serialize(valueData)));
|
|
|
}
|
|
|
}
|
|
|
return valueData;
|
...
|
...
|
@@ -151,6 +164,7 @@ public class RedisCacheableAspect { |
|
|
@Around(value = "@annotation(redisCacheDelTarget)")
|
|
|
public Object cacheEvict (final ProceedingJoinPoint pjp , RedisCacheDelTarget redisCacheDelTarget) throws Throwable{
|
|
|
try{
|
|
|
Set<String> deleteBatchByKeys = RedisUtils.deleteBatchByKeys(redisCacheDelTarget.cacheKey());
|
|
|
String cacheKey = redisCacheDelTarget.cacheKey();
|
|
|
boolean allEntries = redisCacheDelTarget.allEntries();
|
|
|
if(allEntries){
|
...
|
...
|
|