c端系统往往都具有vip功能作为主要盈利点,那咱们的刷题微服务系统肯定也该有,但是系统设计的时候就没有vip系统,今天构思了一下把原有代码重构了一下,
首先,根据原料的题目表建一张vip题目表,可以用来只存储vip题目,或者01区分vip题目,重构了一下新增题目,加了一项添加题目的vip字段的添加
,这样vip的返还我们就有了
由于系统是微服务的形式,用户作为一个单独的模块,那么我们到底是应该怎么来对vip身份进行判断,同时还能保证高并发情景下优化效率呢?
@Overridepublic 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;}