From d1a95d6a7606d94b9489e2841de45d4c529212f3 Mon Sep 17 00:00:00 2001 From: Parker Date: Wed, 3 Feb 2021 00:22:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BC=93=E5=AD=98=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/controller/BaseRestController.java | 9 ++- .../org/opsli/core/cache/local/CacheUtil.java | 38 ++++++++---- .../cache/pushsub/entity/CacheDataEntity.java | 5 +- .../core/cache/pushsub/enums/MsgArgsType.java | 2 - .../cache/pushsub/handler/HotDataHandler.java | 10 +++- .../pushsub/msgs/CacheDataMsgFactory.java | 3 +- .../core/filters/aspect/CacheDataAop.java | 58 +++++++++---------- .../org/opsli/core/utils/CaptchaUtil.java | 6 +- .../java/org/opsli/core/utils/DictUtil.java | 1 - .../java/org/opsli/core/utils/MenuUtil.java | 1 - .../org/opsli/core/utils/SearchHisUtil.java | 4 +- .../java/org/opsli/core/utils/TenantUtil.java | 1 - .../org/opsli/core/utils/UserTokenUtil.java | 8 +-- .../src/main/resources/application-dev.yaml | 2 +- 14 files changed, 79 insertions(+), 69 deletions(-) diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/controller/BaseRestController.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/controller/BaseRestController.java index d3bcd301..2210ed7c 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/controller/BaseRestController.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/base/controller/BaseRestController.java @@ -32,6 +32,7 @@ import org.opsli.api.base.warpper.ApiWrapper; import org.opsli.api.wrapper.system.user.UserModel; import org.opsli.common.annotation.RequiresPermissionsCus; import org.opsli.common.annotation.hotdata.EnableHotData; +import org.opsli.common.constants.CacheConstants; import org.opsli.common.exception.ServiceException; import org.opsli.common.exception.TokenException; import org.opsli.common.msg.CommonMsg; @@ -119,7 +120,8 @@ public abstract class BaseRestController cacheKeys = Lists.newArrayListWithCapacity(2); - // 处理 key - 时控数据 - cacheKeys.add( - CacheUtil.handleKey(CacheType.TIMED, key)); - // 处理 key - 永久数据 - cacheKeys.add( - CacheUtil.handleKey(CacheType.TIMED, key)); + List cacheKeys = Lists.newArrayList(); + if(timed != null){ + count+=2; + // 处理 key - 时控数据 + cacheKeys.add( + CacheUtil.handleKey(CacheType.TIMED, key) + ); + } + if(eden != null){ + count+=2; + // 处理 key - 永久数据 + cacheKeys.add( + CacheUtil.handleKey(CacheType.EDEN, key)); + } // 循环删除缓存数据 for (String cacheKey : cacheKeys) { + // 删除 EhCache boolean ehcacheRet = ehCachePlugin.delete(CacheConstants.EHCACHE_SPACE, cacheKey); if(ehcacheRet){ @@ -571,8 +589,6 @@ public class CacheUtil { } /** - * TODO 待优化 XML - * * 读配置文件 */ private static void readPropertyXML() throws IOException { diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/entity/CacheDataEntity.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/entity/CacheDataEntity.java index c609cdc6..79d5b172 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/entity/CacheDataEntity.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/entity/CacheDataEntity.java @@ -36,12 +36,9 @@ public class CacheDataEntity { /** key */ private String key; - /** 缓存名称 */ - private String cacheName; - public static void main(String[] args) { - CacheDataEntity ret = new CacheDataEntity("123", "12aaaa"); + CacheDataEntity ret = new CacheDataEntity("123"); System.out.println(ToStringBuilder.reflectionToString(ret)); } } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/enums/MsgArgsType.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/enums/MsgArgsType.java index cf32c919..d71e50ba 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/enums/MsgArgsType.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/enums/MsgArgsType.java @@ -59,8 +59,6 @@ public enum MsgArgsType { /** 缓存数据Key */ CACHE_DATA_KEY, - /** 缓存数据Key */ - CACHE_DATA_NAME, /** 缓存数据Value */ CACHE_DATA_VALUE, /** 缓存数据Type */ diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/handler/HotDataHandler.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/handler/HotDataHandler.java index a40a8239..105cc72a 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/handler/HotDataHandler.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/handler/HotDataHandler.java @@ -17,7 +17,9 @@ package org.opsli.core.cache.pushsub.handler; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.opsli.common.constants.CacheConstants; +import org.opsli.core.cache.local.CacheUtil; import org.opsli.core.cache.pushsub.enums.CacheHandleType; import org.opsli.core.cache.pushsub.enums.MsgArgsType; import org.opsli.core.cache.pushsub.enums.PushSubType; @@ -45,10 +47,16 @@ public class HotDataHandler implements RedisPushSubHandler{ @Override public void handler(JSONObject msgJson) { String key = (String) msgJson.get(MsgArgsType.CACHE_DATA_KEY.toString()); - String cacheName = (String) msgJson.get(MsgArgsType.CACHE_DATA_NAME.toString()); Object value = msgJson.get(MsgArgsType.CACHE_DATA_VALUE.toString()); CacheHandleType type = CacheHandleType.valueOf((String )msgJson.get(MsgArgsType.CACHE_DATA_TYPE.toString())); + if(StringUtils.isEmpty(key)){ + return; + } + + // 拼装缓存key + String cacheName = CacheUtil.handleKey(CacheConstants.HOT_DATA_PREFIX +":"+ key); + if(CacheHandleType.UPDATE == type){ ehCachePlugin.put(CacheConstants.EHCACHE_SPACE, cacheName, value); } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/msgs/CacheDataMsgFactory.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/msgs/CacheDataMsgFactory.java index 9cb82ed3..8ea86a60 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/msgs/CacheDataMsgFactory.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/cache/pushsub/msgs/CacheDataMsgFactory.java @@ -50,12 +50,11 @@ public final class CacheDataMsgFactory extends BaseSubMessage{ // 数据 JSONObject jsonObj = new JSONObject(); jsonObj.put(MsgArgsType.CACHE_DATA_KEY.toString(),cacheDataEntity.getKey()); - jsonObj.put(MsgArgsType.CACHE_DATA_NAME.toString(),cacheDataEntity.getCacheName()); jsonObj.put(MsgArgsType.CACHE_DATA_VALUE.toString(),value); jsonObj.put(MsgArgsType.CACHE_DATA_TYPE.toString(), cacheHandleType.toString()); // 热点数据 - 系统数据 - baseSubMessage.build(CHANNEL,PushSubType.HOT_DATA.toString(),jsonObj); + baseSubMessage.build(CHANNEL, PushSubType.HOT_DATA.toString(), jsonObj); return baseSubMessage; } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/CacheDataAop.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/CacheDataAop.java index 2598b223..98c645a3 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/CacheDataAop.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/filters/aspect/CacheDataAop.java @@ -28,6 +28,7 @@ import org.opsli.api.base.warpper.ApiWrapper; import org.opsli.common.annotation.hotdata.EnableHotData; import org.opsli.common.annotation.hotdata.HotDataDel; import org.opsli.common.annotation.hotdata.HotDataPut; +import org.opsli.common.constants.CacheConstants; import org.opsli.core.cache.local.CacheUtil; import org.opsli.core.cache.pushsub.entity.CacheDataEntity; import org.opsli.core.cache.pushsub.enums.CacheHandleType; @@ -75,7 +76,7 @@ public class CacheDataAop { */ @Around("hotDataPut()") public Object hotDataPutProcess(ProceedingJoinPoint point) throws Throwable { - Object[] args= point.getArgs(); + Object[] args = point.getArgs(); Object returnValue = point.proceed(args); // 判断 方法上是否使用 EnableHotData注解 如果没有表示开启热数据 则直接跳过 Annotation annotation = point.getTarget().getClass().getAnnotation(EnableHotData.class); @@ -83,9 +84,7 @@ public class CacheDataAop { return returnValue; } - String simpleName = point.getTarget().getClass().getSimpleName(); - - List cacheDataEntityList = this.putHandlerData(point, returnValue, simpleName); + List cacheDataEntityList = this.putHandlerData(point, returnValue); // 非法判断 if(CollUtil.isEmpty(cacheDataEntityList)){ return returnValue; @@ -94,13 +93,15 @@ public class CacheDataAop { for (CacheDataEntity cacheDataEntity : cacheDataEntityList) { // 更新缓存数据 // 热点数据 - CacheUtil.put(cacheDataEntity.getKey(), returnValue); - - // 广播缓存数据 - 通知其他服务器同步数据 - redisPlugin.sendMessage( - CacheDataMsgFactory.createMsg( - cacheDataEntity, returnValue, CacheHandleType.UPDATE) - ); + boolean putRet = CacheUtil.put(CacheConstants.HOT_DATA_PREFIX +":"+ cacheDataEntity.getKey(), + returnValue); + if(putRet){ + // 广播缓存数据 - 通知其他服务器同步数据 + redisPlugin.sendMessage( + CacheDataMsgFactory.createMsg( + cacheDataEntity, returnValue, CacheHandleType.UPDATE) + ); + } } return returnValue; @@ -123,8 +124,6 @@ public class CacheDataAop { return returnValue; } - String simpleName = point.getTarget().getClass().getSimpleName(); - // 删除状态判断 try { Boolean ret = (Boolean) returnValue; @@ -136,7 +135,7 @@ public class CacheDataAop { return returnValue; } - List cacheDataEntityList = this.delHandlerData(point, args, simpleName); + List cacheDataEntityList = this.delHandlerData(point, args); // 非法判断 if(CollUtil.isEmpty(cacheDataEntityList)){ return returnValue; @@ -144,13 +143,14 @@ public class CacheDataAop { for (CacheDataEntity cacheDataEntity : cacheDataEntityList) { // 更新缓存数据 - 删除缓存 - CacheUtil.del(cacheDataEntity.getKey()); - - // 广播缓存数据 - 通知其他服务器同步数据 - redisPlugin.sendMessage( - CacheDataMsgFactory.createMsg( - cacheDataEntity, returnValue, CacheHandleType.DELETE) - ); + boolean delRet = CacheUtil.del(CacheConstants.HOT_DATA_PREFIX +":"+ cacheDataEntity.getKey()); + if(delRet){ + // 广播缓存数据 - 通知其他服务器同步数据 + redisPlugin.sendMessage( + CacheDataMsgFactory.createMsg( + cacheDataEntity, null, CacheHandleType.DELETE) + ); + } } return returnValue; @@ -164,7 +164,7 @@ public class CacheDataAop { * PUT 处理数据 * @param point */ - private List putHandlerData(ProceedingJoinPoint point, Object returnValue, String simpleName){ + private List putHandlerData(ProceedingJoinPoint point, Object returnValue){ // 这里 只对 继承了 ApiWrapper 的类做处理 if(!(returnValue instanceof ApiWrapper)){ return null; @@ -187,10 +187,7 @@ public class CacheDataAop { // 这里 只对 继承了 BaseEntity 的类做处理 ApiWrapper apiWrapper = (ApiWrapper) returnValue; - // 热数据 前缀增加 方法类名称 减小ID 冲撞 - String cacheKey = CacheUtil.handleKey(simpleName +":"+ apiWrapper.getId()); - - CacheDataEntity ret = new CacheDataEntity(apiWrapper.getId() , cacheKey); + CacheDataEntity ret = new CacheDataEntity(apiWrapper.getId()); // 存放数据 this.putCacheData(cacheDataEntities, ret); @@ -207,7 +204,7 @@ public class CacheDataAop { * DEL 处理数据 * @param point */ - private List delHandlerData(ProceedingJoinPoint point, Object[] args, String simpleName){ + private List delHandlerData(ProceedingJoinPoint point, Object[] args){ if(args == null || args.length == 0){ return null; } @@ -250,12 +247,9 @@ public class CacheDataAop { } } - if(keyList != null && CollUtil.isNotEmpty(keyList)){ for (String key : keyList) { - // 热数据 前缀增加 方法类名称 减小ID 冲撞 - String cacheKey = CacheUtil.handleKey(simpleName +":"+ key); - CacheDataEntity ret = new CacheDataEntity(key , cacheKey); + CacheDataEntity ret = new CacheDataEntity(key); // 存放数据 this.putCacheData(cacheDataEntities, ret); } @@ -295,7 +289,7 @@ public class CacheDataAop { */ private void putCacheData(List cacheDataList, CacheDataEntity cacheData){ // 非法判断 - if(CollUtil.isEmpty(cacheDataList)){ + if(cacheDataList == null){ return; } cacheDataList.add(cacheData); diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/CaptchaUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/CaptchaUtil.java index e57a48c7..8f065ef7 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/CaptchaUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/CaptchaUtil.java @@ -65,7 +65,7 @@ public class CaptchaUtil{ //生成文字验证码 String code = producer.createText(); - boolean ret = redisPlugin.put(CacheUtil.PREFIX_NAME + PREFIX + uuid, code, TIME_OUT); + boolean ret = redisPlugin.put(CacheUtil.getPrefixName() + PREFIX + uuid, code, TIME_OUT); if(ret){ return producer.createImage(code); @@ -90,7 +90,7 @@ public class CaptchaUtil{ } // 验证码 - String codeTemp = (String) redisPlugin.get(CacheUtil.PREFIX_NAME + PREFIX + uuid); + String codeTemp = (String) redisPlugin.get(CacheUtil.getPrefixName() + PREFIX + uuid); if(StringUtils.isEmpty(codeTemp)){ throw new TokenException(TokenMsg.EXCEPTION_CAPTCHA_NULL); } @@ -114,7 +114,7 @@ public class CaptchaUtil{ } //删除验证码 - return redisPlugin.del(CacheUtil.PREFIX_NAME + PREFIX + uuid); + return redisPlugin.del(CacheUtil.getPrefixName() + PREFIX + uuid); } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/DictUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/DictUtil.java index 1181a3ee..279d7f15 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/DictUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/DictUtil.java @@ -25,7 +25,6 @@ import org.opsli.api.base.result.ResultVo; import org.opsli.api.web.system.dict.DictDetailApi; import org.opsli.api.wrapper.system.dict.DictDetailModel; import org.opsli.api.wrapper.system.dict.DictWrapper; -import org.opsli.common.constants.CacheConstants; import org.opsli.common.constants.DictConstants; import org.opsli.common.enums.CacheType; import org.opsli.core.cache.local.CacheUtil; diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/MenuUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/MenuUtil.java index f4dc485f..53d9f5b8 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/MenuUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/MenuUtil.java @@ -26,7 +26,6 @@ import org.opsli.plugins.redis.RedisLockPlugins; import org.opsli.plugins.redis.RedisPlugin; import org.opsli.plugins.redis.lock.RedisLock; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Lazy; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/SearchHisUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/SearchHisUtil.java index c2f44a65..96d90144 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/SearchHisUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/SearchHisUtil.java @@ -71,7 +71,7 @@ public class SearchHisUtil { // 获得当前用户 UserModel user = UserUtil.getUser(); - String cacheKey = CacheUtil.PREFIX_NAME + CACHE_PREFIX + user.getUsername() + ":" + key; + String cacheKey = CacheUtil.getPrefixName() + CACHE_PREFIX + user.getUsername() + ":" + key; return redisPlugin.zReverseRange(cacheKey, 0, count - 1); } @@ -97,7 +97,7 @@ public class SearchHisUtil { } - String cacheKey = CacheUtil.PREFIX_NAME + CACHE_PREFIX + user.getUsername() + ":" + key; + String cacheKey = CacheUtil.getPrefixName() + CACHE_PREFIX + user.getUsername() + ":" + key; String val = values[0]; // 记录 diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/TenantUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/TenantUtil.java index c66961bb..8ff8ee74 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/TenantUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/TenantUtil.java @@ -26,7 +26,6 @@ import org.opsli.plugins.redis.RedisLockPlugins; import org.opsli.plugins.redis.RedisPlugin; import org.opsli.plugins.redis.lock.RedisLock; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Lazy; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java index 5586b25e..398d0795 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/utils/UserTokenUtil.java @@ -26,12 +26,10 @@ import org.apache.commons.lang3.StringUtils; import org.apache.shiro.crypto.hash.Md5Hash; import org.opsli.api.base.result.ResultVo; import org.opsli.api.wrapper.system.user.UserModel; -import org.opsli.common.constants.CacheConstants; import org.opsli.common.constants.SignConstants; import org.opsli.common.constants.TokenConstants; import org.opsli.common.constants.TokenTypeConstants; import org.opsli.common.exception.TokenException; -import org.opsli.common.utils.Props; import org.opsli.core.autoconfigure.properties.GlobalProperties; import org.opsli.core.cache.local.CacheUtil; import org.opsli.core.msg.TokenMsg; @@ -80,9 +78,9 @@ public class UserTokenUtil { static{ // 缓存前缀 - TICKET_PREFIX = CacheUtil.PREFIX_NAME + "ticket:"; - ACCOUNT_SLIP_COUNT_PREFIX = CacheUtil.PREFIX_NAME + "account:slip:count:"; - ACCOUNT_SLIP_LOCK_PREFIX = CacheUtil.PREFIX_NAME + "account:slip:lock:"; + TICKET_PREFIX = CacheUtil.getPrefixName() + "ticket:"; + ACCOUNT_SLIP_COUNT_PREFIX = CacheUtil.getPrefixName() + "account:slip:count:"; + ACCOUNT_SLIP_LOCK_PREFIX = CacheUtil.getPrefixName() + "account:slip:lock:"; } diff --git a/opsli-starter/src/main/resources/application-dev.yaml b/opsli-starter/src/main/resources/application-dev.yaml index 6bfcc75f..e385ce6a 100644 --- a/opsli-starter/src/main/resources/application-dev.yaml +++ b/opsli-starter/src/main/resources/application-dev.yaml @@ -8,7 +8,7 @@ spring: #redis 配置 redis: database: 0 - host: 10.0.0.254 + host: 127.0.0.1 password: '123456' port: 6379