练涛

排行榜设计(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;
posted @   练涛  阅读(312)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-08-04 java8 Stream()等特性的实操,即用即翻
点击右上角即可分享
微信分享提示