mirror of https://gitee.com/stylefeng/roses
【7.0.1】【user】增加user缓存,加快访问速度
parent
65eed55f5e
commit
93796d3db0
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
cn.stylefeng.roses.kernel.system.starter.GunsUserCacheAutoConfiguration
|
Loading…
Reference in New Issue