• 排行榜设计(mysql)


    排行榜设计

    CREATE TABLE `t_daka_rank` (
      `id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
      `consumer_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `ranking` int DEFAULT NULL COMMENT '排名',
      `rank_status` int DEFAULT NULL COMMENT '与昨天比的名次变化',
      `create_time` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='大咖排名记录';
    

    排名规则

    ​ 用户得分做去重排序、每个用户的得分与排序名次对应,确保同分时,排名相同。

    名次变化计算方式

    ​ 根据上次排名、与这次的排名进行比较,1为上升1名,0为不变,-1为下降1名

    ps: 值得注意的是,如果排名不做实时的,那么新加入的用户会暂时没有排名、名次等信息,直到生成下次排名。

    数据存储

    ​ mysql记录每次排名生成的数据(如上面的表设计)

    ​ redis保存各个用户的id、与之对应的排名、名次,用于业务查询。

    遇到的问题

    ​ 当把LocalDateTime 类型的字段保存到redis,再取出来的时候会报序列化错误. 这是由于redis序列化的方式,和我们取出来反序列化的方式不一致产生的。

    ​ 解决方式:加注解

        @JsonDeserialize(using = LocalDateTimeDeserializer.class)
        @JsonSerialize(using = LocalDateTimeSerializer.class)
        private LocalDateTime createTime;
    
  • 相关阅读:
    js回调函数
    .aspx 页面引用命名空间
    git使用
    C# dynamic
    vue难点解析之混入
    rollup的使用
    基本配置webpack.config.js
    webpack之copy-webpack-plugin
    rest请求和restful请求及其中涉及到的幂等特性
    centos破解压缩文件密码
  • 原文地址:https://www.cnblogs.com/famine/p/15099588.html
Copyright © 2020-2023  润新知