From 9a463b4970b15baa75689d7210f28af9e431a714 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Fri, 30 Jul 2021 23:14:48 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.1.1=E3=80=91=E3=80=90cache=E3=80=91?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7=E7=BB=84=E7=BB=87=E6=9C=BA?= =?UTF-8?q?=E6=9E=84=E7=9A=84=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/constants/SystemCachesConstants.java | 5 ++ .../user/cache/UserOrgMemoryCache.java | 49 +++++++++++++++++++ .../modular/user/cache/UserOrgRedisCache.java | 49 +++++++++++++++++++ .../impl/SysUserOrgServiceServiceImpl.java | 31 ++++++++++++ .../GunsSystemCacheAutoConfiguration.java | 15 ++++++ 5 files changed, 149 insertions(+) create mode 100644 kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgMemoryCache.java create mode 100644 kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgRedisCache.java diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemCachesConstants.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemCachesConstants.java index 0d4cd18b9..463b4cf2e 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemCachesConstants.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemCachesConstants.java @@ -52,4 +52,9 @@ public interface SystemCachesConstants { */ String ROLE_INFO_CACHE_PREFIX = "role:"; + /** + * 用户组织机构缓存的前缀 + */ + String USER_ORG_CACHE_PREFIX = "user_org:"; + } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgMemoryCache.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgMemoryCache.java new file mode 100644 index 000000000..0842f5829 --- /dev/null +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgMemoryCache.java @@ -0,0 +1,49 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.modular.user.cache; + +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.memory.AbstractMemoryCacheOperator; +import cn.stylefeng.roses.kernel.system.api.constants.SystemCachesConstants; +import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserOrgDTO; + +/** + * 用户组织机构缓存 + * + * @author fengshuonan + * @date 2021/7/30 23:07 + */ +public class UserOrgMemoryCache extends AbstractMemoryCacheOperator { + + public UserOrgMemoryCache(TimedCache timedCache) { + super(timedCache); + } + + @Override + public String getCommonKeyPrefix() { + return SystemCachesConstants.USER_ORG_CACHE_PREFIX; + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgRedisCache.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgRedisCache.java new file mode 100644 index 000000000..abfa5aff3 --- /dev/null +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/UserOrgRedisCache.java @@ -0,0 +1,49 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.modular.user.cache; + +import cn.stylefeng.roses.kernel.cache.redis.AbstractRedisCacheOperator; +import cn.stylefeng.roses.kernel.system.api.constants.SystemCachesConstants; +import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; +import org.springframework.data.redis.core.RedisTemplate; + +/** + * 用户组织机构缓存 + * + * @author fengshuonan + * @date 2021/2/28 10:23 + */ +public class UserOrgRedisCache extends AbstractRedisCacheOperator { + + public UserOrgRedisCache(RedisTemplate redisTemplate) { + super(redisTemplate); + } + + @Override + public String getCommonKeyPrefix() { + return SystemCachesConstants.USER_ORG_CACHE_PREFIX; + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserOrgServiceServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserOrgServiceServiceImpl.java index 3309a054c..0001e6f79 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserOrgServiceServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserOrgServiceServiceImpl.java @@ -26,6 +26,7 @@ package cn.stylefeng.roses.kernel.system.modular.user.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException; import cn.stylefeng.roses.kernel.system.api.exception.enums.user.SysUserOrgExceptionEnum; import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserOrgDTO; @@ -38,6 +39,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.List; @@ -50,9 +52,19 @@ import java.util.List; @Service public class SysUserOrgServiceServiceImpl extends ServiceImpl implements SysUserOrgService { + @Resource(name = "userOrgCacheApi") + private CacheOperatorApi userOrgCacheApi; + @Override public SysUserOrgDTO getUserOrgByUserId(Long userId) { + // 从缓存获取数据 + String key = String.valueOf(userId); + SysUserOrgDTO sysUserDTOCache = userOrgCacheApi.get(key); + if (sysUserDTOCache != null) { + return sysUserDTOCache; + } + UserOrgRequest userOrgRequest = new UserOrgRequest(); userOrgRequest.setUserId(userId); SysUserOrg sysUserOrg = this.detail(userOrgRequest); @@ -61,6 +73,10 @@ public class SysUserOrgServiceServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUserOrg::getUserId, userId); this.remove(queryWrapper); + + // 清除缓存 + userOrgCacheApi.remove(String.valueOf(userId)); } @Override @@ -107,6 +129,9 @@ public class SysUserOrgServiceServiceImpl extends ServiceImpl userOrgCacheApi() { + TimedCache roleCache = CacheUtil.newTimedCache(SystemCachesConstants.USER_CACHE_TIMEOUT_SECONDS * 1000); + return new UserOrgMemoryCache(roleCache); + } + }