【7.0.1】【user】增加user缓存,加快访问速度

pull/3/head
fengshuonan 2021-02-28 10:46:45 +08:00
parent 65eed55f5e
commit 93796d3db0
8 changed files with 168 additions and 1 deletions

View File

@ -38,4 +38,14 @@ public interface SystemConstants {
*/ */
String DEFAULT_SYSTEM_NAME = "Guns快速开发平台"; String DEFAULT_SYSTEM_NAME = "Guns快速开发平台";
/**
*
*/
String USER_CACHE_PREFIX = "user:";
/**
* (1)
*/
Long USER_CACHE_TIMEOUT_SECONDS = 3600L;
} }

View File

@ -62,6 +62,26 @@
<version>7.0.1</version> <version>7.0.1</version>
</dependency> </dependency>
<!--缓存api-->
<!--用户的查询会使用缓存-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>cache-api</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>cache-sdk-memory</artifactId>
<version>7.0.1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>cache-sdk-redis</artifactId>
<version>7.0.1</version>
<optional>true</optional>
</dependency>
<!--数据库sdk--> <!--数据库sdk-->
<!--数据库dao框架--> <!--数据库dao框架-->
<dependency> <dependency>

View File

@ -0,0 +1,25 @@
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.SystemConstants;
import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO;
/**
*
*
* @author fengshuonan
* @date 2021/2/28 10:23
*/
public class SysUserMemoryCache extends AbstractMemoryCacheOperator<SysUserDTO> {
public SysUserMemoryCache(TimedCache<String, SysUserDTO> timedCache) {
super(timedCache);
}
@Override
public String getCommonKeyPrefix() {
return SystemConstants.USER_CACHE_PREFIX;
}
}

View File

@ -0,0 +1,25 @@
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.SystemConstants;
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 SysUserRedisCache extends AbstractRedisCacheOperator<SysUserDTO> {
public SysUserRedisCache(RedisTemplate<String, SysUserDTO> redisTemplate) {
super(redisTemplate);
}
@Override
public String getCommonKeyPrefix() {
return SystemConstants.USER_CACHE_PREFIX;
}
}

View File

@ -11,6 +11,7 @@ import cn.stylefeng.roses.kernel.auth.api.exception.enums.AuthExceptionEnum;
import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi; import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo; import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo;
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
@ -109,6 +110,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Resource @Resource
private OrganizationServiceApi organizationServiceApi; private OrganizationServiceApi organizationServiceApi;
@Resource
private CacheOperatorApi<SysUserDTO> sysUserCacheOperatorApi;
@Override @Override
public void register(SysUserRequest sysUserRequest) { public void register(SysUserRequest sysUserRequest) {
SysUser sysUser = new SysUser(); SysUser sysUser = new SysUser();
@ -175,6 +179,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 删除该用户对应的用户-数据范围表关联信息 // 删除该用户对应的用户-数据范围表关联信息
sysUserDataScopeService.delByUserId(userId); sysUserDataScopeService.delByUserId(userId);
// 清除缓存中的用户信息
sysUserCacheOperatorApi.remove(String.valueOf(userId));
} }
@Override @Override
@ -199,6 +206,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 更新用户员工信息 // 更新用户员工信息
sysUserOrgService.edit(sysUser.getUserId(), sysUserRequest.getOrgId(), sysUserRequest.getPositionId()); sysUserOrgService.edit(sysUser.getUserId(), sysUserRequest.getOrgId(), sysUserRequest.getPositionId());
// 清除缓存中的用户信息
sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId()));
} }
@Override @Override
@ -209,6 +219,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
SysUserCreateFactory.fillUpdateInfo(sysUserRequest, sysUser); SysUserCreateFactory.fillUpdateInfo(sysUserRequest, sysUser);
this.updateById(sysUser); this.updateById(sysUser);
// 清除缓存中的用户信息
sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId()));
} }
@Override @Override
@ -236,6 +249,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
log.error(SysUserExceptionEnum.UPDATE_USER_STATUS_ERROR.getUserTip()); log.error(SysUserExceptionEnum.UPDATE_USER_STATUS_ERROR.getUserTip());
throw new SystemModularException(SysUserExceptionEnum.UPDATE_USER_STATUS_ERROR); throw new SystemModularException(SysUserExceptionEnum.UPDATE_USER_STATUS_ERROR);
} }
// 清除缓存中的用户信息
sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId()));
} }
@Override @Override
@ -291,6 +307,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo(); SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo();
simpleUserInfo.setAvatar(fileId); simpleUserInfo.setAvatar(fileId);
sessionManagerApi.updateSession(LoginContext.me().getToken(), loginUser); sessionManagerApi.updateSession(LoginContext.me().getToken(), loginUser);
// 清除缓存中的用户信息
sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId()));
} }
@Override @Override
@ -569,9 +588,18 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override @Override
public SysUserDTO getUserInfoByUserId(Long userId) { public SysUserDTO getUserInfoByUserId(Long userId) {
// 从缓存查询用户
SysUserDTO sysUserDTO = sysUserCacheOperatorApi.get(String.valueOf(userId));
if (sysUserDTO != null) {
return sysUserDTO;
}
SysUser sysUser = this.getById(userId); SysUser sysUser = this.getById(userId);
if (ObjectUtil.isNotEmpty(sysUser)) { if (ObjectUtil.isNotEmpty(sysUser)) {
return BeanUtil.copyProperties(sysUser, SysUserDTO.class); SysUserDTO result = BeanUtil.copyProperties(sysUser, SysUserDTO.class);
sysUserCacheOperatorApi.put(String.valueOf(userId), result);
return result;
} }
return null; return null;
} }
@ -618,10 +646,26 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
* @date 2020/3/26 9:54 * @date 2020/3/26 9:54
*/ */
private SysUser querySysUser(SysUserRequest sysUserRequest) { private SysUser querySysUser(SysUserRequest sysUserRequest) {
// 先从缓存中获取用户信息
String userIdKey = String.valueOf(sysUserRequest.getUserId());
SysUserDTO sysUserDTO = sysUserCacheOperatorApi.get(userIdKey);
if (sysUserDTO != null) {
SysUser tempUser = new SysUser();
BeanUtil.copyProperties(sysUserDTO, tempUser);
return tempUser;
}
SysUser sysUser = this.getById(sysUserRequest.getUserId()); SysUser sysUser = this.getById(sysUserRequest.getUserId());
if (ObjectUtil.isNull(sysUser)) { if (ObjectUtil.isNull(sysUser)) {
throw new SystemModularException(SysUserExceptionEnum.USER_NOT_EXIST, sysUserRequest.getUserId()); throw new SystemModularException(SysUserExceptionEnum.USER_NOT_EXIST, sysUserRequest.getUserId());
} }
// 放入缓存
SysUserDTO sysUserDTOCache = new SysUserDTO();
BeanUtil.copyProperties(sysUser, sysUserDTOCache);
sysUserCacheOperatorApi.put(userIdKey, sysUserDTOCache);
return sysUser; return sysUser;
} }

View File

@ -53,11 +53,17 @@
</dependency> </dependency>
<!--用户管理的业务--> <!--用户管理的业务-->
<!--默认使用内存缓存-->
<dependency> <dependency>
<groupId>cn.stylefeng.roses</groupId> <groupId>cn.stylefeng.roses</groupId>
<artifactId>system-business-user</artifactId> <artifactId>system-business-user</artifactId>
<version>7.0.1</version> <version>7.0.1</version>
</dependency> </dependency>
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>cache-sdk-memory</artifactId>
<version>7.0.1</version>
</dependency>
<!--通知管理的业务--> <!--通知管理的业务-->
<dependency> <dependency>

View File

@ -0,0 +1,35 @@
package cn.stylefeng.roses.kernel.system.starter;
import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants;
import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO;
import cn.stylefeng.roses.kernel.system.modular.user.cache.SysUserMemoryCache;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
*
*
* @author fengshuonan
* @date 2021/2/28 10:29
*/
@Configuration
public class GunsUserCacheAutoConfiguration {
/**
*
*
* @author fengshuonan
* @date 2021/2/28 10:30
*/
@Bean
@ConditionalOnMissingBean(name = "sysUserCacheOperatorApi")
public CacheOperatorApi<SysUserDTO> sysUserCacheOperatorApi() {
TimedCache<String, SysUserDTO> sysUserTimedCache = CacheUtil.newTimedCache(SystemConstants.USER_CACHE_TIMEOUT_SECONDS * 1000);
return new SysUserMemoryCache(sysUserTimedCache);
}
}

View File

@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.stylefeng.roses.kernel.system.starter.GunsUserCacheAutoConfiguration