c端系统往往都具有vip功能作为主要盈利点,那咱们的刷题微服务系统肯定也该有,但是系统设计的时候就没有vip系统,今天构思了一下把原有代码重构了一下,
首先,根据原料的题目表建一张vip题目表,可以用来只存储vip题目,或者01区分vip题目,重构了一下新增题目,加了一项添加题目的vip字段的添加
,这样vip的返还我们就有了
由于系统是微服务的形式,用户作为一个单独的模块,那么我们到底是应该怎么来对vip身份进行判断,同时还能保证高并发情景下优化效率呢?
@Override public List<String> getPermissionNow(String userName) { String permissionKeyDel = authPermissionPrefix + "." + userName; String permissionKey = redisUtil.buildKey(authPermissionPrefix, userName); Boolean status = redisUtil.del(permissionKeyDel); // 使用 delete 方法 AuthUser authUser = authUserService.queryByUserName(userName); AuthUserRole authUserRole = authUserRoleDao.queryByUserId(authUser.getId()); AuthRolePermission authRolePermission = new AuthRolePermission(); authRolePermission.setRoleId(authUserRole.getRoleId()); List<AuthRolePermission> rolePermissionList = authRolePermissionService. queryByCondition(authRolePermission); List<Long> permissionIdList = rolePermissionList.stream() .map(AuthRolePermission::getPermissionId).collect(Collectors.toList()); //根据roleId查权限 List<AuthPermission> permissionList = authPermissionService.queryByRoleList(permissionIdList); redisUtil.set(permissionKey, new Gson().toJson(permissionList)); String permissionValue = redisUtil.get(permissionKey); if (StringUtils.isBlank(permissionValue)) { return Collections.emptyList(); } // 从 Redis 中取出的数据类型应为 List<String> List<AuthPermission> permissionList1 = new Gson().fromJson(permissionValue, new TypeToken<List<AuthPermission>>() { }.getType()); List<String> authList = permissionList1.stream().map(AuthPermission::getPermissionKey).collect(Collectors.toList()); return authList; }
标签:题目,String,--,List,vip,new,redisUtil,刷题 From: https://www.cnblogs.com/azwz/p/18442283