首页 > 其他分享 >刷题系统重构--添加vip功能

刷题系统重构--添加vip功能

时间:2024-09-30 18:02:41浏览次数:8  
标签:题目 String -- List vip new redisUtil 刷题

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

相关文章

  • 海盗分金 ONLINE
    观察到这个海盗分金可以线上进行海盗分金\(n\)个人分\(100\)枚金币由编号由小到大依次提出分配方案,然后所有人表决,投票要超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼通过的方案即刻生效,后面的人不再拥有提出方案的权利由于参赛者并不是绝顶聪明的参赛者,请注意你可......
  • AtCoder Beginner Contest 371(ABCDE)
    A个人直接硬解,讨论情况也并不复杂代码:#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e6+10;voidsolve(){chara,b,c;cin>>a>>b>>c;if(a=='<'){if(c=='<......
  • 1284 海港 队列 模拟
    思路解释 1. 数据结构选择: 使用 queue 来存储每艘船的到达时间和乘客国籍信息。 使用数组 a 来记录每个国籍的乘客数量。 2. 输入处理: 读取船只数量 n。 对于每艘船,读取其到达时间 t 和乘客数量 k,然后读取每个乘客的国籍 x。 3. 统计不同......
  • ARM MDK开发中的\$Super\$\$main与\$Sub\$\$main
    参考一般在.s文件中通过类似如下代码来跳入__main中,也就是$Sub$$main函数中:;resetVectortableaddress.LDRR0,=0xE000ED08STRR2,[R0]LDRR0,=SystemInitBLXR0......
  • tarjan
    强连通分量SSC(缩点)有向图缩点(把一个强连通分量看成一个点),用于优化。树枝边:DFS时经过的边,即DFS搜索树上的边反祖边:也叫回边或后向边,与DFS方向相反,从某个结点指向其某个祖先的边横叉边:从某个结点指向搜索树中另一子树中的某结点的边,它主要是在搜索的时候遇到了......
  • 安全:linux:列出所有定时运行的任务
    一,用systemctl列出所有timer不加-all参数时,只列出状态active的timer[root@web2314699]#systemctllist-timers-all:列出所有timer,不管是否active[root@web2314699]#systemctllist-timers--all 二,列出所有的crontab中的定时任务1,用脚本列出所有用户的定时任务#!/......
  • 时间服务
    https://serverfault.com/questions/1036003/ntp-enabled-is-no-but-sync-is-yes-on-rhel7https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/configuring-time-synchronization_configuring-basic-system-setti......
  • aspose.cell 合并内容一样的单元格
    ///<summary>///数据合并///</summary>///<paramname="mySheet"></param>///<paramname="columnIndex">合并的列下标</param>///<paramname="dataIndex">从哪一行开始</param>///<paramna......
  • MyBatis拦截器
    一.JDBC的执行流程(面试题一)JBDC的底层主要是三个接口对象,Connection、Statement、ResultSet。Connection用于建立与数据库的连接,Statement用于向数据库发送sql语句,ResultSet用于封装sql查询语句的结果。原始的JDBC操作数据库主要有以下几个步骤:1.注册驱动使用Class.f......
  • 【学习笔记】TLS/SSL握手
    前言:本篇将介绍TLS握手的实际握手过程,TLS握手创建了Client和Server之间“被保护的通道”,2个单向通道用来保护批量数据的传输(通过Confidentiality、Integrity和Authentication),一个通道是从Client到Server,另一个是从Server到Client。本篇将介绍最基础的握手-即握手采用的是RSA......